消息队列_04(如何利用事务消息实现分布式事务)

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

1.消息队列中的事务

主要解决的是消息生产者和消费者的数据的一致性问题
eg.
下订单的中删除购物车中的商品
消息队列_04(如何利用事务消息实现分布式事务)

2. 分布式事务介绍

2.1 事务

  1. 要么都成功,要么都失败
  2. 不仅限于数据,可以是文件,远端服务,其他形式存储的数据
  3. 原子性:一个事务不可分割,要么成功,要么失败
  4. 一致性:更新完成后读到的数据是更新前或者更新后的数据,不是更新过程的数据
  5. 隔离性:一个事务的执行不能被其他事务干扰
  6. 持久性 :事务一旦完成提交,后续操作不会对事务产生影响

2.2 分布式事务

  1. 即为分布式系统中实现事务
  2. 分布式系统难以严格实现ACID
  3. 常见的分布式事务:2PC、TCC
  4. 事务消息使用场景:需要异步更新,且实时性要求不太高

3. 消息队列如何实现分布式事务

kafka和RocketMQ提供了事务的相关功能

订单系统的事务实现

消息队列_04(如何利用事务消息实现分布式事务)
半消息:与普通消息唯一区别是,在事务提交之前,对于消费者来说,这个消息是不可见的

存在问题:第四步提交事务消息失败怎么办?
  1. kafka:直接抛出异常,用户自己在业务代码里处理
  2. RocketMQ
    a.增加了事务的反查机制来解决事务消息提交失败的问题
    b.实现分布式事务流程如图:
    消息队列_04(如何利用事务消息实现分布式事务)