且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

rocketMq-事务消息介绍

更新时间:2021-10-18 05:43:33

事务消息介绍

rocketMq在4.x版本里面的事务消息功能似乎不是完整的,在阅读的源码过程中发现只有其实宏观上看可以区分为两个阶段

阶段一:prepare阶段,该阶段主要发一个消息到rocketMq,但是该消息只存储在commitLog当中,在consumeQueue中不可见。

阶段二:commit/rollback阶段,该阶段主要是在commit阶段重新生成一个message(prepare阶段消息的克隆),保存到commitLog当中,同时会将该消息保存至consumeQueue当中。


事务消息举例

rocketMq-事务消息介绍
分布式事务的场景


rocketMq-事务消息介绍
rocketMq处理分布式消息的过程

说明:

    1、先发送prepared消息,也就是步骤1中的发送转账消息

    2、执行本地操作,也就是步骤4中的本地事务

    3、发送commit消息,也就是步骤中5中的发送确认消息


rocketMq的交互流程

rocketMq-事务消息介绍
rocketMq分布式事务的过程

说明:

    1、参考阿里云的消息队列截图


事务消息的producer


rocketMq-事务消息介绍
事务性消息生产者

说明:

    1、分布式事务producer多了两个东西,本地事务执行函数,提供给远程回调的回调函数(基本没用)。


事务消息的prepare阶段


rocketMq-事务消息介绍
prepare消息

说明:参见DefaultMQProducerImpl类


rocketMq-事务消息介绍
未拷贝至consumeQueue

说明:参见DefaultMessageStore类

    1、prepare消息不回拷贝至consumeQueue,也就是消息不可见。


事务消息的commit阶段


rocketMq-事务消息介绍
commit阶段查找prepare消息并提交commitLog

说明:参见EndTransactionProcessor类。

    1、EndTransactionProcessor是事务消息commit的入口


rocketMq-事务消息介绍
放置consumeQueue

说明:参见DefaultMessageStore类

    1、rocketMq在消费commit的事务消息的时候会放置到consumeQueu当中

    2、放置到consumeQueue以后就可以被消费了