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运行机制图解

相关推荐
YDS82913 分钟前
DeepSeek RAG&MCP + Agent智能体项目 —— 动态决策策略的接口对接
java·spring boot·ai·agent·spring ai·deepseek
lpfasd12331 分钟前
docker中默认网络的作用和注意事项
网络·docker·容器
淘源码A42 分钟前
专科医院云HIS系统源码:技术栈包括SpringBoot、Angular、MySQL等
spring boot·后端·源码·云his·医院信息系统·医院his系统
EntyIU43 分钟前
DOCKER_CHEATSHEET
运维·docker·容器
小马爱打代码44 分钟前
基于 SpringBoot 的微服务文件上传下载组件设计与实现
spring boot·后端
颜淡慕潇1 小时前
低成本搭建鸿蒙PC运行环境:基于 Docker 的 x86_64 服务器
服务器·docker·harmonyos
SilentSamsara1 小时前
Python 与 Docker:多阶段构建、最小镜像与健康检查
运维·开发语言·python·docker·中间件·容器
情绪总是阴雨天~1 小时前
Dockerfile 完全指南:从指令详解到实战构建
docker
zhangfeng11332 小时前
超算中心 高性能计算 slurm的linux版本 centos7,如何安装docker,如何安装torch2.4
linux·运维·服务器·开发语言·人工智能·机器学习·docker