RocketMQ(21) -- 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. 建行系统从Br

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值