当前位置: 首页 > news >正文

springboot3.2/3.4+rocketmq5.3.3测试程序的基本例子

想测试下springboot新版中与rocketmq5.3.3的配置使用,今天尝试了下,记录如下:
1、首先springboot使用3.2.7,rocketmq使用5.3.3,且使用docker部署rocketmq。

docker pull swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/apache/rocketmq:5.3.3
docker tag  swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/apache/rocketmq:5.3.3  docker.io/apache/rocketmq:5.3.3

创建网络:

docker network create rocketmq

启动rmqnamesrv

# 启动NameServer
docker run -d --name rmqnamesrv -p 9876:9876 --net rocketmq apache/rocketmq:5.3.3 sh mqnamesrv

创建目录并切换进去:

mkdir -p /myweb/rocketmq
cd /myweb/rocketmq

创建配置文件

echo -e "brokerIP1=192.168.15.10\nnamesrvAddr=192.168.15.10:9876\nautoCreateTopicEnable=true" > broker.conf

创建容器:

docker run -d \
--name rmqbroker \
--net rocketmq \
-p 10912:10912 -p 10911:10911 -p 10909:10909 \
-e "NAMESRV_ADDR=rmqnamesrv:9876" \
-v /myweb/rocketmq/broker.conf:/home/rocketmq/rocketmq-5.3.3/conf/broker.conf \
apache/rocketmq:5.3.3 sh mqbroker \
-c /home/rocketmq/rocketmq-5.3.3/conf/broker.conf

下面是可选:

# 启动RocketMQ控制台
docker exec -it rmqbroker bash
#创建topic
sh /home/rocketmq/rocketmq-5.3.3/bin/mqadmin updateTopic \
-n 192.168.15.10:9876 \
-c DefaultCluster \
-t test-topic

2、引入依赖,pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>org.rainpet</groupId><artifactId>rocketmq-demo01</artifactId><version>1.0-SNAPSHOT</version><packaging>jar</packaging><name>rocketmq-demo01</name><url>http://maven.apache.org</url><properties><maven.compiler.source>17</maven.compiler.source><maven.compiler.target>17</maven.compiler.target><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding></properties><dependencies><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>3.8.1</version><scope>test</scope></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter</artifactId><version>3.2.10</version><exclusions><exclusion><groupId>org.slf4j</groupId><artifactId>slf4j-log4j12</artifactId></exclusion><exclusion><groupId>org.slf4j</groupId><artifactId>slf4j-api</artifactId></exclusion></exclusions></dependency><dependency><groupId>org.slf4j</groupId><artifactId>slf4j-api</artifactId><version>2.0.17</version></dependency><dependency><groupId>org.apache.rocketmq</groupId><artifactId>rocketmq-spring-boot-starter</artifactId><version>2.3.3</version><exclusions><exclusion><groupId>org.apache.rocketmq</groupId><artifactId>rocketmq-client</artifactId></exclusion><exclusion><groupId>org.slf4j</groupId><artifactId>slf4j-api</artifactId></exclusion></exclusions></dependency><dependency><groupId>org.apache.rocketmq</groupId><artifactId>rocketmq-client</artifactId><version>5.3.1</version><exclusions><exclusion><artifactId>slf4j-log4j12</artifactId><groupId>org.slf4j</groupId></exclusion></exclusions></dependency></dependencies>
</project>

3、配置文件:application.yml

spring:application:name: my-rocketmq-approcketmq:name-server: 192.168.15.10:9876producer:group: my-producer-groupsend-message-timeout: 3000retry-times: 3max-message-size: 1024000logging:level:root: info

4、消费者:MessageConsumer.java

package org.rainpet.service;import org.apache.rocketmq.spring.annotation.RocketMQMessageListener;
import org.apache.rocketmq.spring.core.RocketMQListener;
import org.springframework.stereotype.Component;@Component
@RocketMQMessageListener(topic = "test-topic",consumerGroup = "my-consumer-group"
)
public class MessageConsumer implements RocketMQListener<String> {@Overridepublic void onMessage(String message) {System.out.println("收到消息:" + message);}
}

5、生产者工具类:

package org.rainpet.service;import org.apache.rocketmq.spring.core.RocketMQTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;@Component
public class MessageProducer {@Autowiredprivate RocketMQTemplate rocketMQTemplate;public void sendMessage(String topic, String message) {rocketMQTemplate.convertAndSend(topic, message);}public void sendMessageWithTag(String topic, String tag, String message) {rocketMQTemplate.convertAndSend(topic + ":" + tag, message);}
}

6、主启动程序,app.java

package org.rainpet;import org.rainpet.service.MessageConsumer;
import org.rainpet.service.MessageProducer;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplication
public class rocketMqApp
{public static void main( String[] args ) throws InterruptedException {var context = SpringApplication.run(rocketMqApp.class, args);MessageProducer messageProducer = context.getBean("messageProducer",MessageProducer.class);System.out.println("RocketMQ Producer is ready to send messages...");try {for (int i = 0; i < 10; i++) {messageProducer.sendMessage("test-topic", "Hello, RocketMQ! Message " + i);Thread.sleep(1000); // 休眠1秒}} catch (InterruptedException e) {Thread.currentThread().interrupt();System.err.println("消息发送被中断: " + e.getMessage());} catch (Exception e) {System.err.println("发送消息时发生错误: " + e.getMessage());}}
}

7、其他
其实试了之后,切换springboot3.2/3.4,都可以。
其他问题:

Receiver class org.springframework.boot.logging.logback.RootLogLevelConfigurator does not define or inherit an implementation of the resolved method 'abstract void configure(ch.qos.logback.classic.LoggerContext)' of interface ch.qos.logback.classic.spi.Configurator.

这个主要原因就是日志框架冲突,pom中通过依赖的引入排除解决。
在这里插入图片描述
②提示:

2025-07-01T16:45:20.557+08:00 ERROR 18000 --- [my-rocketmq-app] [           main] o.a.r.spring.core.RocketMQTemplate       : syncSend failed. destination:test-topic, message:GenericMessage [payload=byte[16], headers={contentType=text/plain;charset=UTF-8, id=0f5afc4b-c4e0-74f7-bbb1-f549ef414a17, timestamp=1751359520442}], detail exception info: org.apache.rocketmq.client.exception.MQClientException: No route info of this topic: test-topic

主要原因:
这个错误提示 “No route info of this topic: test-topic” 表示主题不存在或未创建。
问题解决:
确保在发送消息前创建主题。在RocketMQ控制台或通过命令行创建主题。当然上面的代码已经设置了:

autoCreateTopicEnable=true

也可以自动创建,不然就需要:

# 进入RocketMQ容器
docker exec -it rmqbroker bash# 创建主题
sh /home/rocketmq/rocketmq-5.3.3/bin/mqadmin updateTopic \
-n localhost:9876 \
-c DefaultCluster \
-t test-topic
http://www.dtcms.com/a/263773.html

相关文章:

  • SSVEP Next:现代化的 SSVEP 可视化 Web 快速实现
  • CAU数据挖掘实验 表分析数据插件
  • 【第二章:机器学习与神经网络概述】04.回归算法理论与实践 -(2)支持向量回归(SVR)
  • 软考中级【网络工程师】第6版教材 第1章 计算机网络概述
  • MATLAB构建capm和三因子模型
  • (论文总结)语言模型中的多模态思维链推理
  • 记一次Ubuntu22安装MongoDB8并同步本地数据过程
  • 动手学深度学习13.5. 多尺度目标检测-笔记练习(PyTorch)
  • FPGA FMC 接口
  • 【仿muduo库实现并发服务器】LoopThreadPool模块
  • Linux安装JDK和Maven
  • 多探头分布式雷达测流系统解决方案概述
  • 洛谷P1379 八数码难题【A-star】
  • 目标检测在国防和政府的应用实例
  • vue-i18n+vscode+vue 多语言使用
  • 缺乏对新成员的有效融入机制,如何改进
  • 学习昇腾开发的第12天--安装第三方依赖
  • 【Linux基础知识系列】第三十八篇 - 打印系统与 PDF 工具
  • Ubuntu 20.04 下 OpenVINO 2024 安装与配置
  • 业界优秀的零信任安全管理系统产品介绍
  • 基于 51 单片机做的二十四点小游戏
  • MongoDB 常用增删改查方法及示例
  • stm32 单片机主要优点有哪些?
  • 【Docker基础】Docker数据卷:命名卷(Named Volumes)详解
  • 从 0 到 1 构建可视化限流演示:React + Framer Motion 实现 Token Bucket 动画
  • Camera相机人脸识别系列专题分析之十五:人脸特征检测FFD算法之libcvface_api.so算法API详细注释解析
  • 解决 GitHub Actions 中 S3 部署文件堆积问题的完整指南
  • 使用tensorflow的线性回归的例子(二)
  • 数字雨动画背景
  • TensorFlow源码深度阅读指南