外观
一句话答案
业务操作和写消息表在同一本地事务中,后台任务轮询消息表发送 MQ,消费者处理后更新状态,实现最终一致。
核心要点
流程:
- 本地事务:业务操作 + INSERT 消息表(同一事务)
- 后台定时任务:扫描未发送的消息 → 发 MQ
- 消费者处理 → 确认后更新消息状态
优点: 可靠、不依赖额外组件 缺点: 侵入业务表、需要定时轮询
追问与易错
追问方向:
- 轮询频率怎么设?
- 和事务消息比优缺点?
- 消息表数据量大怎么办?
易错点:
- ❌ 消息表是最终一致最佳方案——侵入大推荐事务消息
- ❌ 忘记处理重复发送
💡 记忆锚点
本地消息表像"备忘录+闹钟":业务操作和写备忘录在同一个事务里(保证不漏),后台闹钟定时检查备忘录把没发的消息补发出去,对方收到后打勾确认。可靠但笨重(侵入业务表、需要轮询),有条件优先用RocketMQ事务消息替代。