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

消息队列中的事务解决的是消息生产者和消费者的数据一致性问题。

在这里插入图片描述
在订单系统中,创建订单的过程执行了两个操作:

  1. 在订单库中插入一条订单数据,创建订单
  2. 将订单内容发给消息队列,购物车订阅了相应主题,根据订单内容中的商品来清理购物车。

  这两个步骤要么同时成功,要么同时失败,否则就会出现订单数据与购物车数据不一致的情况。可以通过分布式事务来解决:

  • 首先订单系统在消息队列上开启一个事务
  • 然后订单系统给消息队列发送一个半消息,半消息与普通消息的唯一区别是:在事务提交前,半消息对于消费者来说是不可见的。
  • 半消息发送成功后,订单系统就执行本地事务,创建订单。
  • 如果订单创建成功,就提交事务消息,否则就进行回滚。事务提交后,消费者,也就是购物车系统,就可以成功消费那个半消息了。
发布了307 篇原创文章 · 获赞 11 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/dl674756321/article/details/105316243