RabbitMQ 环境配置和 DirectRabbitConfig 的 SpringBoot 4.0.X 版本

一、Rabbit MQ隧道的创建

我不想让外面的网络访问我都云服务器,我只让我本机来访问我的云服务器,仅限我本地测试,还未上线。

我给我的RabbitMQ 设置了本地的隧道,但是只设置了端口号为:15672 的端口号,这时候是我的RabbitMQ 的可视化插件的入口,打开云服务器之后用浏览器访问 127.0.0.1:15672 就能进去可视化界面,但是我并没有给我的代码的端口:5672 端口给释放,所以我运行代码报出了下面的错误。

解决方法:

在云服务器上给Rabbti MQ的端口号为5672 的端口给释放开来。

步骤:

1. 先右键你的云服务器

2.右键之后点开属性

3. 点击隧道,再点击添加

4. 添加下面的规则,端口号为 5672, 两个都是5672,源主机和目标主机都是localhost(本机的意思),添加完毕之后重启,解决程序访问 Rabbit MQ 端口未被释放的问题

二、SpringBoot 4.0.X 版本下 Rabbit MQ 的配置的更新

在SpringBoot 4.0.X 版本下 spring.rabbitmq.listener.simple.retry.max-attempts=5 已经被废弃改名了。所以因为找不到 spring.rabbitmq.listener.simple.retry.max-attempts=5 所以会标红,需要改为spring.rabbitmq.listener.simple.retry.max-retries=5 默认重试 5 次。

这是最新的mq配置文件

复制代码
## mq ##
spring.rabbitmq.host=127.0.0.1
spring.rabbitmq.port=5672
spring.rabbitmq.username=admin
spring.rabbitmq.password=admin
#消息确认机制,默认auto
spring.rabbitmq.listener.simple.acknowledge-mode=auto
#设置失败重试 5次
spring.rabbitmq.listener.simple.retry.enabled=true
spring.rabbitmq.listener.simple.retry.max-retries=5

虽然老的文件可能会正常运行,但是其中的弯弯绕绕太多,博主搞不明白,从SprintBoot 的3.0.X 版本到 4.0.X 本就是一个大挑战,所有的环境都可能出问题。

三、SpringBoot4 + Spring AMQP3,类改名了!

Jackson2JsonMessageConverter 是适配 Jackson2 的类,在 Spring AMQP3(SpringBoot4 配套)里废弃 ,换成了 JacksonJsonMessageConverter(适配 Jackson3)。这两个报错的原因就是导入了被废弃的包,现在使用的是下面这两个

复制代码
import org.springframework.amqp.support.converter.JacksonJsonMessageConverter;
复制代码
@Bean
public MessageConverter jsonMessageConverter(){
    return new JacksonJsonMessageConverter();
}

包路径不变:org.springframework.amqp.support.converter.,只是类名去掉了2。

DirectRabbitConfig SpringBoot 3.X 版本的

java 复制代码
package com.example.lotterysystem.common.config;


import org.springframework.amqp.core.Binding;
import org.springframework.amqp.core.BindingBuilder;
import org.springframework.amqp.core.DirectExchange;
import org.springframework.amqp.core.Queue;
import org.springframework.amqp.support.converter.Jackson2JsonMessageConverter;
import org.springframework.amqp.support.converter.MessageConverter;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class DirectRabbitConfig {
    public static final String QUEUE_NAME = "DirectQueue";
    public static final String EXCHANGE_NAME = "DirectExchange";
    public static final String ROUTING = "DirectRouting";
    /**
     * 队列 起名:DirectQueue
     *
     * @return
     */
    @Bean
    public Queue directQueue() {
        // durable:是否持久化,默认是false,持久化队列:会被存储在磁盘上,当消息代理重启时仍然存在,暂存队列:当前连接有效
        // exclusive:默认也是false,只能被当前创建的连接使⽤,⽽且当连接关闭后队列即被删除。此参考优先级⾼于durable
        // autoDelete:是否⾃动删除,当没有⽣产者或者消费者使⽤此队列,该队列会⾃动删除。
        // return new Queue("DirectQueue",true,true,false);
        // ⼀般设置⼀下队列的持久化就好,其余两个就是默认false
        return new Queue(QUEUE_NAME,true);
    }
    /**
     * Direct交换机 起名:DirectExchange
     *
     * @return
     */
    @Bean
    DirectExchange directExchange() {
        return new DirectExchange(EXCHANGE_NAME,true,false);
    }

    /**
     * 绑定 将队列和交换机绑定, 并设置⽤于匹配键:DirectRouting
     *
     * @return
     */
    @Bean
    Binding bindingDirect() {
        return BindingBuilder.bind(directQueue())
                .to(directExchange())
                .with(ROUTING);
    }


    @Bean
    public MessageConverter jsonMessageConverter(){
        new Jackson2JsonMessageConverter();
    }

}

DirectRabbitConfig SpringBoot 4.X 版本的

java 复制代码
package com.example.lotterysystem.common.config;


import org.springframework.amqp.core.Binding;
import org.springframework.amqp.core.BindingBuilder;
import org.springframework.amqp.core.DirectExchange;
import org.springframework.amqp.core.Queue;
import org.springframework.amqp.support.converter.JacksonJsonMessageConverter;
import org.springframework.amqp.support.converter.MessageConverter;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class DirectRabbitConfig {
    public static final String QUEUE_NAME = "DirectQueue";
    public static final String EXCHANGE_NAME = "DirectExchange";
    public static final String ROUTING = "DirectRouting";
    /**
     * 队列 起名:DirectQueue
     *
     * @return
     */
    @Bean
    public Queue directQueue() {
        // durable:是否持久化,默认是false,持久化队列:会被存储在磁盘上,当消息代理重启时仍然存在,暂存队列:当前连接有效
        // exclusive:默认也是false,只能被当前创建的连接使⽤,⽽且当连接关闭后队列即被删除。此参考优先级⾼于durable
        // autoDelete:是否⾃动删除,当没有⽣产者或者消费者使⽤此队列,该队列会⾃动删除。
        // return new Queue("DirectQueue",true,true,false);
        // ⼀般设置⼀下队列的持久化就好,其余两个就是默认false
        return new Queue(QUEUE_NAME,true);
    }
    /**
     * Direct交换机 起名:DirectExchange
     *
     * @return
     */
    @Bean
    DirectExchange directExchange() {
        return new DirectExchange(EXCHANGE_NAME,true,false);
    }

    /**
     * 绑定 将队列和交换机绑定, 并设置⽤于匹配键:DirectRouting
     *
     * @return
     */
    @Bean
    Binding bindingDirect() {
        return BindingBuilder.bind(directQueue())
                .to(directExchange())
                .with(ROUTING);
    }


    @Bean
    public MessageConverter jsonMessageConverter(){
        return new JacksonJsonMessageConverter();
    }

}
相关推荐
边境悍匪1 小时前
蜗牛学苑 Java 智能体学习 Day49|贯穿项目 5 订单下单业务 思维导图复盘
java·开发语言·spring boot·学习·阿里云
Elastic 中国社区官方博客1 小时前
两个依赖和一个配置块:通过 Prometheus 远程写入将 Spring Boot 指标发送到 Elasticsearch
大数据·数据库·spring boot·elasticsearch·搜索引擎·全文检索·prometheus
Roadinforest2 小时前
Spring Boot 4 六步入门实录:从 Hello World 到一个能交付的 Todo API
java·开发语言·spring boot·spring
牧瀬クリスだ2 小时前
Mybatis-Plus:让CRUD快如闪电
java·spring boot·spring·tomcat·mybatis·yml
程序猿乐锅10 小时前
【黑马点评 | 第八篇】Redisson分布式锁
java·数据库·spring boot·redis·分布式·spring·缓存
ly768910 小时前
RabbitMQ 消费确认与预取:manual ack、reject、nack 与 QoS 的取舍
rabbitmq·死信队列·消息可靠性·消费确认·qos 预取
灯澜忆梦11 小时前
【RabbitMQ #7】 | 消息转换器
分布式·rabbitmq·ruby
需要82612 小时前
分布式事务:Seata AT/TCC/SAGA 的取舍与踩坑
java·spring boot·分布式·spring·spring cloud
m0_5873830012 小时前
深圳24小时自助健身房解决方案实战:从系统架构到部署指南
java·人工智能·spring boot·spring·系统架构·需求分析