切换主题
课程设计:让 RocketMQ 跟着业务一起长出来
这页是整套教程的讲师备课稿。老板要的不是“RocketMQ 有哪些 API”,而是“业务为什么会走到这里,到了这里该用哪个特性,怎么用才不坑”。
一句话定位
用一个订单履约系统,从同步调用一路演进到可生产化的 RocketMQ 5.x 消息架构。

学完你能做什么
读完整套教程后,你应该能做到五件事:
- 能把 MQ 解释成“主链路和旁路能力之间的缓冲层”,而不是只说异步解耦。
- 能用
rocketmq-v5-client-spring-boot-starter:2.3.4写出可运行的发送和消费代码。 - 能根据业务问题选择普通消息、顺序消息、延时消息、事务消息。
- 能处理消费失败、重复消费、消费堆积、幂等、补偿和 ACL。
- 能从 Spring Boot 自动配置和官方源码入口定位常见问题。
持续业务主线
贯穿案例是“订单履约系统”。业务不是一次成型的,而是一边增长一边暴露问题。
| 阶段 | 产品或线上问题 | 这一阶段学什么 |
|---|---|---|
| 订单刚上线 | 下单后同步发短信、加积分、通知仓库 | 为什么需要消息队列 |
| 业务稍微增长 | 下单接口变慢,旁路服务失败拖累主链路 | 普通消息、异步解耦 |
| 产品加渠道 | 短信、邮件、站内信要分流 | Topic、Tag、Key |
| 状态变复杂 | 已支付、已发货等状态偶尔乱序 | 顺序消息、messageGroup |
| 增加超时关单 | 扫库定时任务越来越重 | 延时消息 |
| 支付链路上线 | 本地事务成功但消息发送失败 | 事务消息 |
| 大促来临 | 发送消息不能阻塞主链路 | 异步发送和回调 |
| 消费出事故 | 重复扣积分、失败消息没人管 | 幂等、重试、死信、补偿 |
| 流量继续上涨 | 消费堆积,处理不过来 | PushConsumer 调优 |
| 运营要介入 | 要手动批量拉取和确认消息 | SimpleConsumer、不可见时间、ack |
| 准备生产化 | 权限、隔离、配置、排错都要补齐 | ACL、namespace、源码入口 |
教学设计矩阵
| 单元 | 学员问题 | 教学目标 | 官方/源码依据 | 案例设计 | 检查标准 |
|---|---|---|---|---|---|
| 最小闭环 | 5.x starter 怎么跑起来? | 跑通发送和消费 | 官方 Quick Start、samples | 订单创建消息 | 能看到消息被消费 |
| 普通消息 | 同步下单太慢怎么办? | 会异步拆旁路 | Normal Message 文档、syncSendNormalMessage | 下单后发通知 | 能说清主链路和旁路 |
| 消息模型 | Topic/Tag/Key 怎么分? | 建立命名和路由模型 | 官方消息模型、samples 配置 | 通知渠道分流 | 能设计 Topic 和 Tag |
| PushConsumer | 服务怎么自动消费? | 会写监听器 | @RocketMQMessageListener、DefaultListenerContainer | 积分服务自动消费 | 能返回消费结果 |
| SimpleConsumer | 什么时候主动拉取? | 理解不可见时间和 ack | RocketMQClientTemplate#receive/ack | 运营批处理 | 能解释不 ack 的后果 |
| 顺序消息 | 订单状态乱序怎么办? | 会用 messageGroup | FIFO 文档、syncSendFifoMessage | 订单状态流转 | 同一订单状态有序 |
| 延时消息 | 关单怎么做? | 用延时消息替代扫库 | Delay Message 文档 | 30 分钟未支付关单 | 能处理已支付兜底 |
| 事务消息 | 本地事务和消息怎么一致? | 会用事务消息和回查 | Transaction 文档、sendMessageInTransaction | 支付成功发履约消息 | 能解释 commit/rollback/check |
| 工程治理 | 线上失败怎么收口? | 掌握幂等、重试、死信、补偿 | 官方消费行为、源码参数 | 重复扣积分修复 | 能设计幂等键 |
| 生产化 | 怎么安全上线? | 配置、ACL、调优、排错 | RocketMQProperties、samples ACL | 多环境隔离 | 能列出上线清单 |
每章固定结构
- 产品又提需求了,或者线上暴露了什么问题。
- 当前写法为什么撑不住。
- RocketMQ 这个特性解决问题的边界。
- Spring Boot 2.3.4 怎么写。
- 小技巧。
- 常见坑。
- 练习题。
本教程使用的版本
xml
<dependency>
<groupId>org.apache.rocketmq</groupId>
<artifactId>rocketmq-v5-client-spring-boot-starter</artifactId>
<version>2.3.4</version>
</dependency>注意:RocketMQ 5.x Java SDK 通过 endpoint 访问服务端。官方 Quick Start 示例使用 localhost:8081。不要把旧教程里的 NameServer 配置直接套到这套 starter 上。
来源
- Maven Central:https://central.sonatype.com/artifact/org.apache.rocketmq/rocketmq-v5-client-spring-boot-starter/2.3.4
- Apache RocketMQ Quick Start:https://rocketmq.apache.org/docs/quickStart/01quickstart/
- Apache RocketMQ Feature Behavior:https://rocketmq.apache.org/docs/featureBehavior/01normalmessage/
- Apache RocketMQ Spring samples:https://github.com/apache/rocketmq-spring/tree/rocketmq-spring-all-2.3.4/rocketmq-v5-client-spring-boot-samples