21、RocketMQ实战:RocketMQ应用

分布式消息队列RocketMQ

四、 RocketMQ应用

4.4)事务消息

4、 4.1)XA模式三剑客;

4、 4.1.1)XA协议;

XA(Unix Transaction)是一种分布式事务解决方案,一种分布式事务处理模式,是基于XA协议的。

XA协议由Tuxedo(Transaction for Unix has been Extended for Distributed Operation,分布式操作扩展之后的Unix事务系统)首先提出的,并交给X/Open组织,作为资源管理器与事务管理器的接口标准。

XA模式中有三个重要组件:TC、TM、RM。

4、 4.1.2)TC;

Transaction Coordinator,事务协调者;维护全局和分支事务的状态,驱动全局事务提交或回滚。

RocketMQ中Broker充当着TC

4、 4.1.3)TM;

Transaction Manager,事务管理器;定义全局事务的范围:开始全局事务、提交或回滚全局事务,它实际是全局事务的发起者。

RocketMQ中事务消息的Producer充当着TM

4、 4.1.4)RM;

Resource Manager,资源管理器;管理分支事务处理的资源,与TC交谈以注册分支事务和报告分支事务的状态,并驱动分支事务提交或回滚。

RocketMQ中事务消息的Producer及Broker均是RM

4、 4.2)XA模式架构;

*

XA模式是一个典型的2PC,其执行原理如下:

1、 TM向TC发起指令,开启一个全局事务;
2、 根据业务要求,各个RM会逐个向TC注册分支事务,然后TC会逐个向RM发出预执行指令;
3、 各个RM在接收到指令后会在进行本地事务预执行;
4、 RM将预执行结果Report给TC当然,这个结果可能是成功,也可能是失败;
5、 TC在接收到各个RM的Report后会将汇总结果上报给TM,根据汇总结果TM会向TC发出确认指令;

若所有结果都是成功响应,则向TC发送Global Commit指令

只要有结果是失败响应,则向TC发送Global Rollback指令
6、 TC在接收到指令后再次向RM发送确认指令;

事务消息方案并不是一个典型的XA模式;因为XA模式中的分支事务是异步的,而事务消息方案 中的消息预提交与预扣款操作间是同步的。

4、 4.3)问题引入;

这里的一个需求场景是:工行用户A向建行用户B转账1万元,处理流程如下图:

*

可以使用同步消息来处理该需求场景:

1、 工行系统发送一个给B增款1万元的同步消息M给Broker;
2、 消息被Broker成功接收后,向工行系统发送成功ACK;
3、 工行系统收到成功ACK后从用户A中扣款1万元;
4、 建行系统从Broker中获取到消;