Skip to content

16. 练习与验收矩阵:把 RocketMQ 真正学成项目能力

这一章不是新特性,而是把整套订单履约案例收束成可练、可验收、可迁移的能力。

最终业务图

text
下单服务
  -> OrderCreated 普通消息
  -> OrderPaymentTimeoutCheck 延时消息

支付服务
  -> OrderPaid 事务消息

订单状态服务
  -> OrderStatusChanged 顺序消息,messageGroup=orderId

通知、积分、库存、风控、运营批处理
  -> PushConsumer 或 SimpleConsumer
  -> 幂等、重试、补偿、日志、监控

能力验收矩阵

能力你应该能做到检查标准
普通消息拆出下单旁路动作下单接口不再同步调用通知/积分/仓库
Topic/Tag/Key设计消息路由每条消息有业务 key 和清晰 tag
PushConsumer自动消费消费成功返回 SUCCESS,失败不吞异常
SimpleConsumer主动批处理能解释不可见时间和 ack
顺序消息保证局部顺序同一订单用 orderId 做 messageGroup
延时消息到点检查超时关单前查询订单当前状态
事务消息生产者侧一致性本地事务成功才 commit,支持回查
异步发送降低主链路等待future 成功/失败都有记录
幂等抗重复投递消费端有唯一幂等键
补偿失败可恢复有失败记录和补偿入口
调优处理堆积先查瓶颈,再调线程和实例
ACL安全上线密钥不进仓库,环境隔离清楚
源码排错能定位 starter 问题知道自动配置、template、监听容器入口

综合练习一:订单创建

需求:

用户下单后,订单服务只保存订单并发送 OrderCreated。通知服务和积分服务分别消费。

要求:

  1. 设计 topic、tag、key。
  2. 写出发送代码。
  3. 写出两个 consumerGroup。
  4. 说明短信失败是否影响下单结果。

参考答案:

text
Topic: order-event-topic
Tag: order-created
Key: orderId
ConsumerGroup:
  notify-service-group
  points-service-group

短信失败不影响下单结果。通知服务消费失败时返回失败,进入重试或补偿。

综合练习二:订单状态流转

需求:

同一个订单的状态必须按创建、支付、发货顺序处理。不同订单之间不需要互相等待。

要求:

  1. 选择消息类型。
  2. 设计 messageGroup
  3. 说明业务层还需要什么保护。

参考答案:

选择顺序消息。messageGroup=orderId。业务层仍要做状态版本校验,防止旧事件覆盖新状态。

综合练习三:支付成功

需求:

支付服务把支付单改成 PAID 后,履约服务必须收到 OrderPaid

要求:

  1. 选择消息类型。
  2. 写出本地事务成功和失败时怎么处理。
  3. 写出回查依据。

参考答案:

选择事务消息。本地事务成功后 commit,失败后 rollback。回查支付单状态,PAID 则 COMMIT,失败或关闭则 ROLLBACK。

综合练习四:消费失败

需求:

积分服务偶发超时,不能重复加积分,也不能悄悄丢消息。

要求:

  1. 设计幂等键。
  2. 说明失败时返回什么。
  3. 说明补偿记录包含哪些字段。

参考答案:

幂等键优先用 eventId + consumerName。失败时返回 FAILURE。补偿记录包含 eventId、topic、tag、key、payload 摘要、失败原因、重试次数、状态、创建时间。

最终上线检查清单

检查项通过标准
版本使用 rocketmq-v5-client-spring-boot-starter:2.3.4
endpoint指向 RocketMQ 5.x Proxy
topic命名清晰,已创建,权限正确
tag能支撑消费者粗过滤
key使用业务主键,便于排查
group按业务消费者独立设计
幂等每个消费者都有处理记录
失败有重试、死信或补偿策略
日志有 messageId、key、tag、耗时
监控能看到发送失败、消费失败、堆积
ACL密钥不入库,按环境隔离
排错团队知道 starter 核心源码入口

教程审计清单

这套教程每次维护都要检查:

  1. 是否仍然锁定 rocketmq-v5-client-spring-boot-starter:2.3.4
  2. 是否仍围绕订单履约业务成长线。
  3. 是否每章都有业务问题、技术选择、小技巧和常见坑。
  4. 是否把 5.x endpoint 模型和旧教程区分清楚。
  5. 是否有练习题和参考答案。
  6. 是否能追溯到官方文档或 rocketmq-spring-all-2.3.4 源码。

来源

Built with VitePress. Deployed on Cloudflare Pages.