文章

什么是事务消息?如何实现?


什么是事务消息?如何实现?

什么是事务消息?如何实现?

关于事务消息的概念和原理,胖友可以看看官方对这块的解答,即 《RocketMQ 4.3 正式发布,支持分布式事务》 的 「四 事务消息」 小节。

艿艿 16 年的时候,基于 RocketMQ 早期的版本,写了 《RocketMQ 源码分析 —— 事务消息》 文章,虽然 RocketMQ 版本不太一样,但是大体的思路是差不多的,可以帮助胖友更容易的读懂事务消息相关的源码。

  • 简单看了下最新版本的 RocketMQ 的事务代码,新增了 RMQ_SYS_TRANS_HALF_TOPIC 和 RMQ_SYS_TRANS_OP_HALF_TOPIC 两个队列。
    • Producer 发送 PREPARED Message 到 Broker 后,先存储到 RMQ_SYS_TRANS_HALF_TOPIC 队列中。
    • Producer 提交或回滚 PREPARED Message 时,会添加一条消息到 RMQ_SYS_TRANS_OP_HALF_TOPIC 队列中,标记这个消息已经处理。
    • Producer 提交 PREPARED Message 时,会将当前消息存储到原 Topic 的队列中,从而该消息能够被 Consumer 拉取消费。

具体的代码实现,可以看看 《芋道 Spring Boot 消息队列 RocketMQ 入门》的「9. 事务消息」 小节。

本文由作者按照 CC BY 4.0 进行授权