分布式事务解决方案(生活案例分享)

消息队列解决分布式事务
1、2pc 两阶段提交
有订单操作A 库存操作B
如果订单操作失败,但是库存操作失败那结果如何呢?让我们分析下
订单方法为A 库存方法为B
在没有进行分布式事务的情况下,A会提交事务,B则会回滚,那就会产生
订单失败 但是库存减了的情况,这肯定不符合业务逻辑,所以在此进行处理
操作就用到了分布式事务
当订单失败时,库存成功时,我们应该让库存也失败,就是说,相关联的一系列操作
有一个事务回滚则全部回滚,解决方案1用到消息队列做简单处理:
1.1应对简单分布式事务
@Transactional:::1.建立连接2.开启事务3.执行方法4.提交回滚
订单方法:
@Transactional
orderForm() {
sendQueue()发送消息
local(); //本地事务
}
库存方法:
@Transactional
inventory() {
localsql(); //本地事务
}
1.1.1订单先给消息对列发送消息 消息队列暂时保存消息,先不给库存消费
1.1.2.然后订单执行完发送消息后在执行本地事务,如果本地事务成功了,则会把
成功的状态给消息队列,消息队列进行更改并可被库存消费,如果本地事务失败了
则把第一次发送到消息队列的消息删掉,若是本地事务成功了,但是消息队列更改状
态时出错了咋办?rabbitmq有个机制定时询问订单的本地事务是否成功,若是几次不理会,
就会把消息对列的消息删了
[图片]

2.可以将相关联的一些操作进行分组管理,比如说订单跟库存各自有1个事务。
可以将这个2个事务通过一个分布式事务组进行管理,协调。
打个比方吧,
订单:小芳 库存:老王 订单事务:提交(喜欢)/回滚(不喜欢)
分布式事务管理:我(媒婆) 2个事务成功-数据库备份 试恋成功
事务中一个不成功则全部回滚: 试恋失败
今天下午3点进行一次1对1相亲大会,小芳跟老王都想着来,找我微信登记
相亲开始了,小芳跟老王都来了,小芳看到老王后真是2眼放光,偷摸跟我说
老王好帅,还是个程序员,我好喜欢。过了会,老王也过来了,跟我说这娘们
一看不是好人啊,还总说想跟我学编程,我又不傻她这不纯纯白嫖嘛,算了,我回去了。
就是说小芳喜欢老王,可老王不喜欢小芳,就是试恋失败,小芳也不能再
去喜欢老王了(都进不去数据库)。若是2人都喜欢 则进行恩爱甜蜜之旅(进入数据库)

如果知识你不懂,就找我,生活案例告诉你如果深刻记住这些问题逻辑。
具体技术还需要自己加固欧,否则小芳都不喜欢你哈哈哈哈
今天就到这,咱们明天见

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

敖夜猿不再闷

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值