消息队列_04(如何利用事务消息实现分布式事务)
如何利用事务消息实现分布式事务
1.消息队列中的事务
主要解决的是消息生产者和消费者的数据的一致性问题
eg.
下订单的中删除购物车中的商品
2. 分布式事务介绍
2.1 事务
- 要么都成功,要么都失败
- 不仅限于数据,可以是文件,远端服务,其他形式存储的数据
- 原子性:一个事务不可分割,要么成功,要么失败
- 一致性:更新完成后读到的数据是更新前或者更新后的数据,不是更新过程的数据
- 隔离性:一个事务的执行不能被其他事务干扰
- 持久性 :事务一旦完成提交,后续操作不会对事务产生影响
2.2 分布式事务
- 即为分布式系统中实现事务
- 分布式系统难以严格实现ACID
- 常见的分布式事务:2PC、TCC
- 事务消息使用场景:需要异步更新,且实时性要求不太高
3. 消息队列如何实现分布式事务
kafka和RocketMQ提供了事务的相关功能
订单系统的事务实现
半消息:与普通消息唯一区别是,在事务提交之前,对于消费者来说,这个消息是不可见的
存在问题:第四步提交事务消息失败怎么办?
- kafka:直接抛出异常,用户自己在业务代码里处理
- RocketMQ
a.增加了事务的反查机制来解决事务消息提交失败的问题
b.实现分布式事务流程如图: