Skip to content

课程设计:让 RocketMQ 跟着业务一起长出来

这页是整套教程的讲师备课稿。老板要的不是“RocketMQ 有哪些 API”,而是“业务为什么会走到这里,到了这里该用哪个特性,怎么用才不坑”。

一句话定位

用一个订单履约系统,从同步调用一路演进到可生产化的 RocketMQ 5.x 消息架构。

订单履约系统演进图

学完你能做什么

读完整套教程后,你应该能做到五件事:

  1. 能把 MQ 解释成“主链路和旁路能力之间的缓冲层”,而不是只说异步解耦。
  2. 能用 rocketmq-v5-client-spring-boot-starter:2.3.4 写出可运行的发送和消费代码。
  3. 能根据业务问题选择普通消息、顺序消息、延时消息、事务消息。
  4. 能处理消费失败、重复消费、消费堆积、幂等、补偿和 ACL。
  5. 能从 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服务怎么自动消费?会写监听器@RocketMQMessageListenerDefaultListenerContainer积分服务自动消费能返回消费结果
SimpleConsumer什么时候主动拉取?理解不可见时间和 ackRocketMQClientTemplate#receive/ack运营批处理能解释不 ack 的后果
顺序消息订单状态乱序怎么办?会用 messageGroupFIFO 文档、syncSendFifoMessage订单状态流转同一订单状态有序
延时消息关单怎么做?用延时消息替代扫库Delay Message 文档30 分钟未支付关单能处理已支付兜底
事务消息本地事务和消息怎么一致?会用事务消息和回查Transaction 文档、sendMessageInTransaction支付成功发履约消息能解释 commit/rollback/check
工程治理线上失败怎么收口?掌握幂等、重试、死信、补偿官方消费行为、源码参数重复扣积分修复能设计幂等键
生产化怎么安全上线?配置、ACL、调优、排错RocketMQProperties、samples ACL多环境隔离能列出上线清单

每章固定结构

  1. 产品又提需求了,或者线上暴露了什么问题。
  2. 当前写法为什么撑不住。
  3. RocketMQ 这个特性解决问题的边界。
  4. Spring Boot 2.3.4 怎么写。
  5. 小技巧。
  6. 常见坑。
  7. 练习题。

本教程使用的版本

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 上。

来源

Built with VitePress. Deployed on Cloudflare Pages.