前言
在处理分布式事务的问题上,除了前几篇谈到的可以使用seata,Hmily保证事务的最终一致性之外,使用消息队列也可以达到同样的效果
使用消息中间件解决分布式事务的问题,是在分布式事务框架还没有真正流行起来的时候比较常用的解决此类问题的手段。使用消息中间件解决分布式事务问题,也有2种主要的思考方向,一种是通过消息表,另一种就是借助消息中间件自身的事务特性,比如rocketMq在4.X版本之后提供了事务消息,可以借助事务消息的特性来解决分布式事务问题
业务场景
我们仍以用户A向用户B转账为例,如果使用rocketMq来做,将会出现下面的情形
交互流程如下:
- Bank1向MQ Server发送转账消息
- Bank1执行本地事务,扣减金额
- Bank2接收消息,执行本地事务,添加金额
rocketMq事务消息机制
我们以下面的这张图为例进行上述转账过程的分析