图解分布式事务的全部解决方案
图解分布式事务难题
Seata和Rocketmq事务消息也是我们我们正在使用的,非常适合中小型公司
AP、CP两个维度展开解决方案
Seata和Rocketmq事务消息方案
本方案具有: 强弱结合型事务 全部特点 非常适合中小型项目使用
秒杀/抢购/电商库存增减/供应链库存增减 等场景,都是属于 强弱结合型 的数据一致性场景
首先看看 RocketMQ 的事务消息, 能够保证本地操作 + 消息发送的原子性。具体来说, 主要是保证了本地方法执 行和消息发送在一个分布式事务中,要不全部成功,要不全部失败。
RocketMQ 通过发送 half 消息来实现,下面详细说明一下:
- 消息发送方 向 Broker 发送一条 half 消息;
- half 消息发送成功后,消息发送方 执行本地事务;
- 如果 消息发送方 执行本地事务成功,则向 Broker 发送 commit 请求,否则发送 rollback 请求;
- 如果 Broker 收到的是 rollback 请求,则删除保存的 half 消息;
- 如果 Broker 收到的是 commit 请求,则把 half 消息投递到 真实 队列, 等待消费服务来拉取,然后删除保存的 half 消息;
- 如果 Broker 没有收到 rollback/commit 请求,则会发送请求到 Producer 查询本地事务状态,然后根据 Producer 返回的本地状态做 commit/rollback 相关处理。