想测试下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-app
rocketmq:
name-server: 192.168.15.10:9876
producer:
group: my-producer-group
send-message-timeout: 3000
retry-times: 3
max-message-size: 1024000
logging:
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> {
@Override
public 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 {
@Autowired
private 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
2664

被折叠的 条评论
为什么被折叠?



