基于MQ解决分布式事务

 

  • 场景 
     


     
      在分布式场景中,如图所示: 如第3步报错,订单状态将会回滚到待支付状态,但是第二步不会回滚,依然会将消息推送到MQ(积分队列)中去,增加积分。 所以会导致,支付状态未更新成功,依然增加积分。 
     解决方案: 支付服务创建一个补偿队列,单独监听服务,比对订单状态,如果不一致,则更新订单状态。
     补偿队列再挂,就用死信队列、定时任务......
     
  • 基于MQ解决分布式事务原理:采用最终一致性原理
  1. 确保生产者一定将增加积分的消息投递到MQ中, 采用:确认机制
  2. 确保消费者消费消息一定成功,如果没有异常情况下通知MQ删除该消息,否则情况下不断重试消费 。 采用:手动ack应答形式。
     注意:重试过程中,需要注意消息幂等性问题。
  3. 如果MQ异步代码执行之后,代码出现异常的情况下,如何保证分布式事务问题。 
    采用:补偿队列
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值