事务消息介绍
rocketMq在4.x版本里面的事务消息功能似乎不是完整的,在阅读的源码过程中发现只有其实宏观上看可以区分为两个阶段
阶段一:prepare阶段,该阶段主要发一个消息到rocketMq,但是该消息只存储在commitLog当中,在consumeQueue中不可见。
阶段二:commit/rollback阶段,该阶段主要是在commit阶段重新生成一个message(prepare阶段消息的克隆),保存到commitLog当中,同时会将该消息保存至consumeQueue当中。
事务消息举例
说明:
1、先发送prepared消息,也就是步骤1中的发送转账消息
2、执行本地操作,也就是步骤4中的本地事务
3、发送commit消息,也就是步骤中5中的发送确认消息
rocketMq的交互流程
说明:
1、参考阿里云的消息队列截图
事务消息的producer
说明:
1、分布式事务producer多了两个东西,本地事务执行函数,提供给远程回调的回调函数(基本没用)。
事务消息的prepare阶段
说明:参见DefaultMQProducerImpl类
说明:参见DefaultMessageStore类
1、prepare消息不回拷贝至consumeQueue,也就是消息不可见。
事务消息的commit阶段
说明:参见EndTransactionProcessor类。
1、EndTransactionProcessor是事务消息commit的入口
说明:参见DefaultMessageStore类
1、rocketMq在消费commit的事务消息的时候会放置到consumeQueu当中
2、放置到consumeQueue以后就可以被消费了