持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第23天,点击查看活动详情
RabbitMQ 事务消息
什么是事务
事务是恢复和并发控制的基本单位。
事务(Transaction)具有4个属性:原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability)。
这四个属性称为ACID特性。
本地事务
- 一个事务只链接一个支持事务的数据源; 本地事务操作一般如下:
- transaction begin
- insert/update/delete
- ...
- transaction commit/rollback
分布式事务
两阶段提交
分布式事务指事务的操作不同节点上。比如下单和扣库存场景,一般下单和扣库存分别属于不同一个节点,然后要保证一个事务,因此涉及分布式事务。
- a. 准备阶段
- b. 提交/回滚阶段
两阶段提交过程:
事务消息
一些业场景需要实现本地操作和消费发送的事务一致性,消息发送成功,那么本地操作也需要成功;消息发送失败,本地操作失败(成功也需要回滚)
Rocket 事务消息
事务模型
- 发送方发送半事务消息
- Broker收到半事务消息存储后返回结果
- 发送半事务消息方处理本地事务
- 发送方把本地事务处理结果以消息形式发送到Broker
- Broker在固定的时间内(默认60秒)未收到4的确认消息,Broker为发送方发送回查消息
- 业务发送发收到Broker回查消息后,查询本地业务执行结果
- 业务方发送回查结果消息