RocketMQ 事务消息

145 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第23天,点击查看活动详情

RabbitMQ 事务消息

什么是事务

事务是恢复和并发控制的基本单位。

事务(Transaction)具有4个属性:原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability)。

这四个属性称为ACID特性。

本地事务

  • 一个事务只链接一个支持事务的数据源; 本地事务操作一般如下:
- transaction begin
- insert/update/delete
- ...
- transaction commit/rollback

分布式事务

两阶段提交

分布式事务指事务的操作不同节点上。比如下单和扣库存场景,一般下单和扣库存分别属于不同一个节点,然后要保证一个事务,因此涉及分布式事务。

  • a. 准备阶段
  • b. 提交/回滚阶段

两阶段提交过程:

事务消息

一些业场景需要实现本地操作和消费发送的事务一致性,消息发送成功,那么本地操作也需要成功;消息发送失败,本地操作失败(成功也需要回滚)

Rocket 事务消息

事务模型

  1. 发送方发送半事务消息
  2. Broker收到半事务消息存储后返回结果
  3. 发送半事务消息方处理本地事务
  4. 发送方把本地事务处理结果以消息形式发送到Broker
  5. Broker在固定的时间内(默认60秒)未收到4的确认消息,Broker为发送方发送回查消息
  6. 业务发送发收到Broker回查消息后,查询本地业务执行结果
  7. 业务方发送回查结果消息

发送事务消息

检查确认事务消息

参考资料