Spring Boot 整合MQ
Spring Boot 整合 RocketMQ
本文档介绍如何在 Spring Boot 项目中集成和使用 RocketMQ 消息队列。
一、Maven 依赖
1.1 引入 RocketMQ 客户端
在项目的 pom.xml 文件中添加 RocketMQ 客户端依赖:
1 | |
1.2 Spring Boot 相关依赖
确保项目中已引入 Spring Boot 相关依赖:
1 | |
二、配置文件
在 application.yml 或 application.properties 中配置 RocketMQ 相关参数。
2.1 YAML 格式配置
1 | |
2.2 Properties 格式配置
1 | |
2.3 配置说明
| 配置项 | 说明 | 必填 |
|---|---|---|
rocketmq.name-server |
RocketMQ NameServer 地址 | ✅ |
rocketmq.producer.group |
生产者组名称 | ✅ |
rocketmq.producer.send-message-timeout |
发送消息超时时间(毫秒) | ❌ |
rocketmq.producer.retry-times-when-send-failed |
发送失败重试次数 | ❌ |
rocketmq.consumer.group |
消费者组名称 | ✅ |
三、生产者使用
3.1 创建生产者配置类
1 | |
3.2 使用生产者发送消息
1 | |
3.3 生产者使用示例
1 | |
四、消费者使用
4.1 创建消费者配置类
1 | |
4.2 使用 @Component 方式创建消费者
1 | |
4.3 消费者配置说明
| 配置项 | 说明 | 示例 |
|---|---|---|
setConsumerGroup() |
消费者组名称 | 同一组内的消费者负载均衡消费 |
setNamesrvAddr() |
NameServer 地址 | 从配置文件读取 |
setConsumeFromWhere() |
消费起始位置 | CONSUME_FROM_FIRST_OFFSET 从第一条开始 |
setConsumeMessageBatchMaxSize() |
批量消费数量 | 建议设置为 10 |
subscribe() |
订阅 Topic 和 Tag | subscribe("topic", "*") 订阅所有 tags |
4.4 消费状态说明
ConsumeConcurrentlyStatus.CONSUME_SUCCESS:消费成功,消息会被确认ConsumeConcurrentlyStatus.RECONSUME_LATER:消费失败,消息会重新投递
五、Topic 和 Tag 说明
5.1 Topic(主题)
Topic 是消息的逻辑分类,一个 Topic 可以包含多个消息队列。
5.2 Tag(标签)
Tag 是 Topic 下的子分类,用于更细粒度的消息过滤。
5.3 使用建议
1 | |
六、消息发送方式
6.1 同步发送
1 | |
6.2 异步发送
1 | |
6.3 单向发送(不关心结果)
1 | |
七、注意事项
- NameServer 地址:确保所有服务连接到同一个 RocketMQ NameServer
- 消费者组名称:同一消费者组内的消费者会负载均衡消费消息
- Topic 创建:确保 Topic 已在 RocketMQ 中创建,否则消息发送会失败
- 消息体格式:消息体必须是字节数组,字符串需要转换为
byte[] - 异常处理:生产者和消费者都要做好异常处理和日志记录
- 消费幂等性:确保消息消费的幂等性,避免重复消费导致的问题
- 资源释放:应用关闭时,记得关闭生产者和消费者
八、常见问题
8.1 连接失败
问题:connect to null failed
原因:配置文件中 NameServer 地址未配置或配置错误
解决:检查配置文件中的 rocketmq.name-server 配置
8.2 消息发送失败
问题:消息发送抛出异常
原因:
- Topic 不存在
- NameServer 连接失败
- 网络问题
解决:
- 确保 Topic 已在 RocketMQ 中创建
- 检查 NameServer 地址是否正确
- 检查网络连接
8.3 消息消费不到
问题:消费者启动成功但收不到消息
原因:
- Topic 名称不一致
- Tag 表达式不匹配
- 消费者组名称冲突
解决:
- 确认生产者和消费者使用相同的 Topic
- 检查 Tag 表达式(建议使用
"*"订阅所有) - 确保消费者组名称唯一
作者:NowPion
用代码驱动业务,让通信更稳定、更可观测。
Spring Boot 整合MQ
https://blog.newpon.top/2025/11/08/SpringBoot整合MQ/