【分布式事务】可靠消息最终一致性

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/yyx3214/article/details/100915961

在这里插入图片描述
今天给大家分享的是分布式事务:可靠消息最终一致性
这个的意思,就是干脆不要用本地的消息了,直接基于MQ来实现事务,比如阿里的RocketMQ就支持消息事务

  • A系统先发送一个prepared消息到mq,如果这个prepared消息发送失败那么就直接取消操作别执行了

  • 如果这个消息发送成功过了,那么接着执行本地事务,如果成功就告诉mq发送确认消息,如果失败就告诉mq回滚消息

  • 如果发送了确认消息,那么此时B系统会接收到确认消息,然后执行本地的事务

  • mq会自动定时轮询所有prepared消息回调你的接口,问你,这个消息是不是本地服务处理失败了,所有没发送确认消息?那是继续重试还是回滚?一般来说这里你就可以查下数据库看之前本地事务是否执行,如果回滚了,那么这里也会滚吧。这个就是避免可能本地事务执行成功了,别确认消息发送失败了

  • 这个方案里,要是系统B的事务失败了咋办?重试,自动不断重试直到成功,如果实在是不行,那么就是针对重要的资金类业务进行回滚,比如B系统本地回滚后,想办法通知系统A也回滚,或者发送报警由人工来手工回滚和补偿
    在这里插入图片描述

这个方案应该是外边公司用的最多的一个方案,如果是严格资金要求绝对不能出错,还是用TCC;
如果一般的分布式,比如订单插入之后要调用库存服务更新库存,库存数据没有资金那么敏感,可以用可靠消息最终一致性方案。

留下你的赞再走吧
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/yyx3214/article/details/100915961