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

相关推荐
kirito学长-Java8 分钟前
springboot/ssm网上宠物店系统Java代码编写web宠物用品商城项目
java·spring boot·后端
键盘侠00725 分钟前
springboot 上传图片 转存成webp
android·spring boot·okhttp
胖毁青春,瘦解百病1 小时前
Docker镜像源设置不生效问题排查
docker·容器
AI人H哥会Java1 小时前
【Spring】基于XML的Spring容器配置——<bean>标签与属性解析
java·开发语言·spring boot·后端·架构
计算机学长felix1 小时前
基于SpringBoot的“大学生社团活动平台”的设计与实现(源码+数据库+文档+PPT)
数据库·spring boot·后端
sin22011 小时前
springboot数据校验报错
spring boot·后端·python
嘤嘤怪呆呆狗2 小时前
【开发问题记录】使用 Docker+Jenkins+Jenkins + gitee 实现自动化部署前端项目 CI/CD(centos7为例)
前端·vue.js·ci/cd·docker·gitee·自动化·jenkins
大大怪将军~~~~3 小时前
SpringBoot 入门
java·spring boot·后端
安然望川海3 小时前
springboot 使用注解设置缓存时效
spring boot·后端·缓存
计算机学长felix3 小时前
基于SpringBoot的“在线BLOG网”的设计与实现(源码+数据库+文档+PPT)
spring boot·毕业设计