Spring boot 3 集成rocketmq-spring-boot-starter解决版本不一致问题

安装RocketMQ根据上篇文章使用Docker安装RocketMQ并启动之后,有个隐患详情见下文

Spring Boot集成

复制代码
<dependency>
  <groupId>org.apache.rocketmq</groupId>
  <artifactId>rocketmq-spring-boot-starter</artifactId>
  <version>2.2.3</version>
</dependency>
  • rocketmq还没有支持spring boot 3。

  • rocketmq自动转配的方式是spring boot 2的方式解决方法:使用spring boot 3自动装配方式,这个需要去了解stater的写法通过源码发现 RocketMQAutoConfiguration是需要自动装配的所以在resource文件夹下创建METAINF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports

    java 复制代码
    org.apache.rocketmq.spring.autoconfigure.RocketMQAutoConfiguration

RocketMQ连接失败

RocketMQ yml配置: 隐患就是name-service这里启动会报错连接失败,如果你使用的是腾讯云服务器并且使用官方docker命令部署RocketMQ,问题就出在docker 命令使用了--net=host此时服务器内9876端口并未开放使用firewall-cmd --add-port=7896/tcp --permanent,注意重启网卡以及腾讯云控制台端口开放。Tip:-pdocker默认会修改防火墙规则

yml 复制代码
rocketmq:
  name-server: ip:9876
  # 生产者
  producer:
    group: test_group
    # 消息发送超时时间
    send-message-timeout: 10000
    # 消息最大长度4M
    max-message-size: 4096
    # 消息发送失败重试次数
    retry-times-when-send-failed: 3
    # 异步消息发送失败重试次数
    retry-times-when-send-async-failed: 2
  # 消费者
  consumer:
    group: test_group
    # 每次提取的最大消息数
    pull-batch-size: 5

RocketMQ Broker连接失败

接下来在启动: 发现还是报错发现是RocketMQ Broker端口连接失败问题,参照如下解决

  1. 如果是docker单节点部署,应该有两个容器,进入rocketmq容器中找到broker.conf

  2. 修改配置文件:只增加多出的配置,然后把这个配置文件复制出去重启这个容器

    yml 复制代码
    brokerClusterName = DefaultCluster
    brokerName = broker-a
    brokerId = 0
    deleteWhen = 04
    fileReservedTime = 48
    brokerRole = ASYNC_MASTER
    flushDiskType = ASYNC_FLUSH
    brokerIP1=122.51.115.127
    namesrvAddr=122.51.115.127:9876;localhost:9876
    autoCreateTopicEnable=true
  3. 删除Broker容器,重新部署docker run -d --net=host --name=rocketmqBroker -v type=bind,source=/home/server/rocketmq,target=/home/rocketmq/store apache/rocketmq ./mqbroker -n localhost:9876 -C 配置文件路径配置文件路径是真实存在容器内的所以需要把配置文件放在映射的文件夹中

然后启动spring boot程序

发送/接收信息

接上文,这个类具有接收信息和发送信息,看以下类注释

java 复制代码
@EnableAspectJAutoProxy
@EnableAsync
@EnableScheduling
@Slf4j
@Indexed
@SpringBootApplication
@EnableDiscoveryClient
@RestController
@Tag(name = "rocket测试控制器")
@RequiredArgsConstructor
//这个注解用于回调接收信息,你要接收那个TOPIC主题的信息,以及你所属哪个组
@RocketMQMessageListener(consumerGroup = "test_group",topic = TOPIC)
public class RocketMQApplication implements RocketMQListener<String> {
    public static final String TOPIC = "test_rocket";

    public static void main(String[] args) {
        try {
            //打开rockermq打印
            System.setProperty("rocketmq.client.logUseSlf4j", "true");
            SpringApplication.run(RocketMQApplication.class, args);
            log.info("项目启动成功(ง ˙o˙)ว");
        } catch (Exception e) {
            log.error("启动失败:",e);
        }
    }

    private final RocketMQTemplate rocketMQTemplate;

    @GetMapping("/send/msg")
    public String sendMsg1 (){
        try {
            Message<String> msg = MessageBuilder.withPayload("Hello,RocketMQ").build();
            //发送信息
            SendResult sendResult = rocketMQTemplate.syncSend(TOPIC, msg);
            log.error("发送结果 = {}",sendResult);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return "OK" ;
    }

    @Override
    public void onMessage(String message) {
        log.error("我是消费者 = {}",message);
    }
}

,请求接口,然后就会收到信息

RocketMQ运行机制图解

相关推荐
一叶飘零_sweeeet13 小时前
SpringBoot 数据脱敏实战: 构建企业级敏感信息保护体系
java·spring boot·数据安全
小蒜学长14 小时前
基于Spring Boot的火灾报警系统的设计与实现(代码+数据库+LW)
java·数据库·spring boot·后端
武昌库里写JAVA14 小时前
基于Spring Boot + Vue3的办公用品申领管理系统
java·spring boot·后端
中国lanwp14 小时前
Spring Boot的配置文件加载顺序和规则
java·spring boot·后端
百思可瑞教育15 小时前
ActiveMQ、RocketMQ、RabbitMQ、Kafka 的全面对比分析
vue.js·分布式·rabbitmq·rocketmq·activemq·北京百思可瑞教育·百思可瑞教育
隔壁阿布都16 小时前
spring boot + mybatis 使用线程池异步修改数据库数据
数据库·spring boot·mybatis
帝国辉耀11 天前
docker、docker daemon、k8s、dockershim、containerd之间的关系
docker·容器·kubernetes
明明跟你说过1 天前
【k8s】资源限制管理:Namespace、Deployment与Pod的实践
运维·docker·云原生·容器·kubernetes·k8s
2301_794333911 天前
实验室服务器配置|通过Docker实现Linux系统多用户隔离与安全防控
linux·服务器·docker·实验室
ponnylv1 天前
深入剖析Spring Boot启动流程
java·开发语言·spring boot·spring