消息中间件系列教程(18) -RabbitMQ-基于RabbitMQ解决分布式事务(思想)

经典案例:以目前流行点外卖的案例,用户下单后,调用订单服务,让后订单服务调用派单系统通知送外卖人员送单,这时候订单系统与派单系统采用MQ异步通讯。

RabbitMQ解决分布式事务原理: 采用最终一致性原理。

在这里插入图片描述

根据最终一致性,按派单流程提出问题,解决分布式事务:

1.怎么保证订单发送到了订单队列?

  • 答:采用确认机制,在生产者设置确认回调,如果不成功,则一直发送消息到消息队列。

2.怎么保证消费者一定消费了队列消息?

  • 答:使用补偿机制手动ACK模式,一直重试去保存(注意幂等性问题)。

3.订单如果发送到了消息队列,但是后面的代码出异常了,执行了回滚,前面的插入订单代码失效,怎么处理?

  • 答:见上图,有一个补单系统,生产者发送订单到队列的时候,同时发送了给补单系统,补单消费者接受到消息,会比对订单数据库和派单数据库,如果订单数据库内容和派单数据库内容不一致,则插入数据到订单系统。

4.如果第2步的消费者使用补偿机制还是失败了,怎么办?

  • 答:只能使用记录日志,定时健康检查,人工去补偿了。

5.如果第3步的补单消费者消费失败了,怎么办?

  • 答:一样使用记录日志,定时健康检查,人工去补偿了

通过以上的步骤可以完美的解决了分布式事务的问题了。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值