=================
== Time Stream ==
=================
一个小学生

RocketMQ中的事务消息

RocketMQ

RocketMQ的事务消息学习。

RocketMQ事务消息实现原理基于两阶段提交和定时事务状态回查机制:

  • 应用程序在事务内完成相关业务数据落库,需要同步调用RocketMQ消息发送接口,发送状态为prepare的消息,发送成功后,RocketMQ服务器会回调发送者的事件监听程序,记录消息本地事务状态,该标记与本地业务同属于一个事务,确保消息发送与本地事务的原子性。
  • RocketMQ收到prepare消息时,会先备份消息的原Topic与原消费队列,然后将消息存储在主题为RMQ_SYS_TRANS_HALF_TOPIC的消息消费队列中。
  • MQ消息服务器开启一个定时任务,消费RMQ_SYS_TRANS_HALF_TOPIC的消息,向消息发送端发起事务状态回查,应用程序根据保存的事务状态告诉MQ服务器事务状态,如果是提交或者回滚,消息服务器提交或回滚,如果是未知,MQ在超过回查次数后依然无法知道消息事务状态,就默认回滚消息。