Skip to content
进阶

一句话答案

业务操作和写消息表在同一本地事务中,后台任务轮询消息表发送 MQ,消费者处理后更新状态,实现最终一致。

核心要点

流程:

  1. 本地事务:业务操作 + INSERT 消息表(同一事务)
  2. 后台定时任务:扫描未发送的消息 → 发 MQ
  3. 消费者处理 → 确认后更新消息状态

优点: 可靠、不依赖额外组件 缺点: 侵入业务表、需要定时轮询

追问与易错

追问方向:

  • 轮询频率怎么设?
  • 和事务消息比优缺点?
  • 消息表数据量大怎么办?

易错点:

  • ❌ 消息表是最终一致最佳方案——侵入大推荐事务消息
  • ❌ 忘记处理重复发送

💡 记忆锚点

本地消息表像"备忘录+闹钟":业务操作和写备忘录在同一个事务里(保证不漏),后台闹钟定时检查备忘录把没发的消息补发出去,对方收到后打勾确认。可靠但笨重(侵入业务表、需要轮询),有条件优先用RocketMQ事务消息替代。