RabbitMQ 实现分布式事务 通俗理解 简单易学(思想)

一. 什么是分布式事务

有两个服务,一个订单服务,一个商品服务。当我们下单成功后,订单服务会调用商品服务的扣库存方法,如果这时候商品服务出现异常,扣库存失败,那就会导致事务的问题,以后有可能出现超卖。所以我们在微服务架构开发的时候,一定要处理好分布式事务

二. 分布式事务理论

比较流行的就是BASE,CAP定理

CAP理论:

是由加州大学伯克利分校Eric Brewer教授提出来的,他指出WEB服务无法同时满足一下3个属性:

  • 一致性(Consistency) : 客户端知道一系列的操作都会同时发生(生效)
  • 可用性(Availability) : 每个操作都必须以可预期的响应结束
  • 分区容错性(Partition tolerance) : 即使出现单个组件无法可用,操作依然可以完成

具体地讲在分布式系统中,在任何数据库设计中,一个Web应用至多只能同时支持上面的两个属性。显然,任何横向扩展策略都要依赖于数据分区。因此,设计人员必须在一致性与可用性之间做出选择。

BASE理论:

在分布式系统中,我们往往追求的是可用性,它的重要程序比一致性要高,那么如何实现高可用性呢? 前人已经给我们提出来了另外一个理论,就是BASE理论,它是用来对CAP定理进行进一步扩充的。BASE理论指的是:

  • Basically Available(基本可用)
  • Soft state(软状态)
  • Eventually consistent(最终一致性)

BASE理论是对CAP中的一致性和可用性进行一个权衡的结果,理论的核心思想就是:我们无法做到强一致,但每个应用都可以根据自身的业务特点,采用适当的方式来使系统达到最终一致性(Eventual consistency)

三.RabbitMQ怎么实现分布式事务

总所周知 分布式事务有多种解决方案,例如2CP,TCC,本地消息表等解决方案,今天我们重点来说说RabbitMQ实现分布式事务的解决方案

RabbitMQ解决分布式事务原理: 采用最终一致性原理
需要保证以下三要素
1、确认生产者一定要将数据投递到MQ服务器中(采用MQ消息确认机制)
2、MQ消费者消息能够正确消费消息,采用手动ACK模式,使用不补偿机制(注意重试幂等性问题)
3、如何保证第一个事务先执行,采用补偿机制,创建一个补单消费者进行监听,如果订单没有创建成功,进行补单。

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章