今天给大家分享的是分布式事务:可靠消息最终一致性
这个的意思,就是干脆不要用本地的消息了,直接基于MQ来实现事务,比如阿里的RocketMQ就支持消息事务
-
A系统先发送一个prepared消息到mq,如果这个prepared消息发送失败那么就直接取消操作别执行了
-
如果这个消息发送成功过了,那么接着执行本地事务,如果成功就告诉mq发送确认消息,如果失败就告诉mq回滚消息
-
如果发送了确认消息,那么此时B系统会接收到确认消息,然后执行本地的事务
-
mq会自动定时轮询所有prepared消息回调你的接口,问你,这个消息是不是本地服务处理失败了,所有没发送确认消息?那是继续重试还是回滚?一般来说这里你就可以查下数据库看之前本地事务是否执行,如果回滚了,那么这里也会滚吧。这个就是避免可能本地事务执行成功了,别确认消息发送失败了
-
这个方案里,要是系统B的事务失败了咋办?重试,自动不断重试直到成功,如果实在是不行,那么就是针对重要的资金类业务进行回滚,比如B系统本地回滚后,想办法通知系统A也回滚,或者发送报警由人工来手工回滚和补偿
这个方案应该是外边公司用的最多的一个方案,如果是严格资金要求绝对不能出错,还是用TCC;
如果一般的分布式,比如订单插入之后要调用库存服务更新库存,库存数据没有资金那么敏感,可以用可靠消息最终一致性方案。
留下你的赞再走吧