首页 > 其他 > 详细

利用事务消息实现分布式事务

时间:2019-08-26 16:03:44      阅读:94      评论:0      收藏:0      [点我收藏+]

一、消息事务

其实很多场景下,我们“发消息”这个过程,目的往往是通知另外一个系统或者模块去更新数据,消息队列中的“事务”,主要解决消息生产者和消息消费者的数据一致性问题

 

用户在电商APP上购物时,先把商品加到购物车里,然后几件商品一起下单,最后支付,完成购物流程。

这个过程中有一个需要用到消息队列的步骤,订单系统创建订单后,发消息给购物车系统,将已下单的商品从购物车中删除。因为从购物车删除已下单商品这个步骤,并不是用户下单支付这个主要流程中必要的步骤,使用消息队列来异步清理购物车是更加合理。

技术分享图片

对于订单系统,它创建订单的过程实际执行了2个步骤的操作:

  • 在订单库中插入一条订单数据,创建订单;
  • 发消息给消息队列,消息的内容就是刚刚创建的订单

对于购物车系统:

  • 订阅相应的主题,接收订单创建的消息,然后清理购物车,在购物车中删除订单的商品。

 

在分布式系统中,上面提到的步骤,任何一个都有可能失败,如果不做任何处理,那就有可能出现订单数据与购物车数据不一致的情况,比如:

  • 创建了订单,没有清理购物车;
  • 订单没创建成功,购物车里面的商品却被清掉了。

所以我们需要解决的问题为:在上述任意步骤都有可能失败的情况下,还要保证订单库和购物车库这两个库的数据一致性。

 

二、分布式事务

分布式事务就是要在分布式系统中实现事务。在分布式系统中,在保证可用性和不严重牺牲性能的前提下,光是要实现数据的一致性就已经非常困难了,显然实现严格的分布式事务是更加不可能完成的任务。所以目前大家所说的分布式事务,更多情况下,是在分布式系统中事务的不完整实现,在不同的应用场景中,有不同的实现,目的都是通过一些妥协来解决实际问题。

利用事务消息实现分布式事务

原文:https://www.cnblogs.com/chjxbt/p/11412727.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!