基于rabbitMQ解决分布式事务

常见的分布式事务解决方案:
1、基于数据库XA/JTA协议的方式: 需要数据库厂商支持;java组件有atomikos等
2、异步校对数据的方式: 支付宝、微信支付主动查询支付状态、对账单的形式
3、基于可靠消息的MQ解决方案: 异步场景;通用性强;扩展性较高
4、TCC编程式解决方案: 严选、阿里自己封装的DTX

课外读物:

https://my.oschina.net/dyyweb/blog/1633373

错误场景:

错误示例

调用接口失败时,订单系统事务回滚,提示用户操作失败
误以为这样的接口调用写法,就不会有分布式事务问题
问题:
1、运单系统可能已经进行执行操作,接口发生了异常(超时),订单系统数据进行回滚,导致数据不一致
2、接口成功,订单系统事务提交失败,运单系统没有回滚,数据不一致

解决步骤

基本架构

总结

优点:
1、通用性强
2、拓展性强
3、方案成熟
缺点:
1、基于消息中间件,只适用于异步场景(任务必须成功: 如,付了钱,必须有订单,有运单人)
2、消息处理会有延迟,需要业务上能容忍
尽量避免分布式事务
尽量将非核心事务做成异步(如扣钱,转账等还是同步)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值