事务消息介绍

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以后就可以被消费了

相关文章:

  • 2022-12-23
  • 2022-12-23
  • 2021-11-29
  • 2022-03-06
  • 2022-02-03
  • 2021-05-08
  • 2021-07-29
猜你喜欢
  • 2018-08-27
  • 2021-05-30
  • 2021-06-18
  • 2021-06-25
  • 2022-01-21
相关资源
相似解决方案