RocketMQ 5.x在SpringBoot中的上手使用过程
准备环境
- JDK 17
- Spring Boot 3.2.3
- RocketMQ(服务端) 5.3.1
- rocketmq-v5-client-spring-boot-starter(客户端) 2.3.1
在 SpringBoot 项目中依赖如下配置:
1 | <dependency> |
如果还未搭建服务端,可以先看第5节-服务器环境搭建。
参数配置
按照 SpringBoot 的约定习俗,在上手一个新的 spring-boot-starter
项目时,想要知道怎么使用它,看它的 AutoConfiguration 就对了。
在 rocketmq-v5-client-spring-boot
中,对应的 AutoConfiguration 类为 RocketMQAutoConfiguration
,其类定义部分代码如下:
1 |
|
可以发现,在rocketmq-v5-client-spring-boot
中,根据 RocketMQ 5.x 在架构上做的改进,使用了 endpoints
来替代传统的 namesrvAddr
,以支持更灵活的网络拓扑和云原生架构。endpoints
通常指向 RocketMQ 的 Broker 或 Nameserver 地址,用于生产者与 RocketMQ 集群建立连接。endpoints 是一个 URL 或 IP 地址(ip:host)列表(使用;
分割)。
⚠️注意:在 RocketMQ 5.x 中,现已默认使用gRPC作为通信协议,entpoints更建议指向 Proxy 地址,一般默认端口为8081。
因此,现在想要启用默认的生产者(ProducerBuilder),只需要配置rocketmq.producer.endpoints
即可。
想要启用默认的消费者(SimpleConsumerBuilder),只需要配置rocketmq.simple-consumer.endpoints
即可。
而RocketMQClientTemplate
则是通过判断当前应用上下文是否含有ProducerBuilder
或SimpleConsumerBuilder
Bean对象生成而来。它属于rocketmq-v5-client-spring-boot
模块下,也就是说它利用了Spring特性,提供了Spring风格的API,方便开发者通过 Spring 的编程模型来进行消息发送和接收。
既然是原生态的简易使用教程,那么就尽可能在不写多的代码的情况下,实现生产环境中使用MQ。
因此,本次项目就只配置 rocketmq.producer.endpoints
用于启用默认的生产者,消费者使用Push消费模式,所以配置rocketmq.push-consumer.endpoints
。配置如下:
1 | rocketmq: |
topic
在代码中指定,不使用rocketmq.producer.topic
和rocketmq.push-consumer.topic
配置默认的topic。
tips: 在启动客户端服务时,topic需要先创建,否则会启动报错。
生产者生产消息
生产消息通过SpringBoot自动装配的RocketMQClientTemplate
对象实现,发送Message
对象,示例代码如下:
1 |
|
⚠️注意:在 RocketMQ 5.x 中,
Message
对象已从自定义对象改为spring-messaging
包中的Message
对象。一般通过MessageBuilder
构建,实例对象类型为GenericMessage
。
消费者消费消息
消费者通过@RocketMQMessageListener
注解,并实现RocketMQListener
接口消费消息,示例代码如下:
1 |
|
服务端环境搭建
-
下载二进制包
在 Apache RocketMQ 本地部署 RocketMQ 文档中,可以找到最新的二进制包,位置如下:
如果想保持跟本文相同版本,可以直接点击链接下载RocketMQ 5.3.1版本。
-
启动NameServer
1
2
3
4
5
6### 启动namesrv
nohup sh bin/mqnamesrv &
### 验证namesrv是否启动成功
tail -f ~/logs/rocketmqlogs/namesrv.log
The Name Server boot success... -
本地模式启动Broker+Proxy
1
2
3
4
5
6### 先启动broker
nohup sh bin/mqbroker -n localhost:9876 --enable-proxy &
### 验证broker是否启动成功, 比如, broker的ip是192.168.1.2 然后名字是broker-a
tail -f ~/logs/rocketmqlogs/proxy.log
The broker[broker-a,192.169.1.2:10911] boot success...mqbroker
脚本默认会读取conf/broker.conf
配置用于Broker服务。在conf/rmq-proxy.json
中是Proxy服务的配置,通过--enable-proxy
命令启动时,需要加上-pc conf/rmq-proxy.json
参数指定配置文件位置。broker.conf
的监听端口key为listenPort
,管理端口key为brokerAdminPort
。rmq.proxy.json
的gRPC请求端口key为grpcServerPort
,传统的消息发送和接收请求的端口key为remotingListenPort
。 -
关闭服务
停止Broker:
sh bin/mqshutdown broker
停止NameServer:
sh bin/mqshutdown namesrv
关于RocketMQ的管理命令可以参考Admin Tool。