RocketMQ事务消息实现的示意图:
- 通过写Half消息的方式来实现一阶段消息对用户不可见
- 通过Op消息来标记事务消息的状态
- 通过读取Half消息来生成一条新的Normal消息来完成二阶段Commit之后消息对Consumer可见
- 通过Op消息来执行回查
优势:
- Half Queue和Op Queue的数量可控,不会随着Topic的增加而增加
- 没有外部依赖,实现自包含
缺陷:
- 每条事务消息至少需要写一条Half消息(异常情况可能会有多条)和Normal,写放大了
- 所有Half消息都是写到全局预设的一个内部的Topic,这块可能性能会有一些问题(所有Topic的事务消息会往一个Topic上写)
- 全局Op消息写一个Topic,回查时间可能会有相互影响