目录
一、2PC 两阶段提交(数据库层面,XA 规范)
1. 原理 & 执行流程
2. Java 落地实现
3. 优缺点
4. 适用场景
二、TCC(Try-Confirm-Cancel,侵入代码型柔性事务)
1. 三段式执行流程(业务代码手动编码,无锁)
2. Java 落地
3. 优缺点
4. 适用场景
三、可靠消息最终一致性(本地消息表 / MQ 事务,最常用)
方案分两种:本地消息表、MQ 事务消息(RocketMQ、RabbitMQ 事务)
1. 本地消息表流程(通用,所有 MQ 都能用)
2. RocketMQ 事务消息(原生封装,省去本地消息表)
3. Java 落地
4. 优缺点
5. 适用场景
四、SAGA(长事务、大流程事务,Seata-SAGA)
1. 执行流程
2. Java 落地
3. 优缺点
4. 适用场景
四大方案核心区别对比表
Java 开发选型口诀
补充:Seata 框架(Java 分布式事务一站式)
Seata AT(最常用,无代码侵入的改进 2PC)
分布式事务:跨多个数据库 / 微服务的数据操作,要么全部成功、要么全部回滚,CAP 理论下不存在完美方案,工程分:**2PC、TCC、SAGA、本地消息表 / 可靠消息最终一致性(MQ 事务)** 四大主流,Java 开发最常用后三种。
前置:本地事务是单库 ACID;分布式跨库 / 跨服务,无法依赖数据库原生事务。
一、2PC 两阶段提交(数据库层面,XA 规范)
1. 原理 & 执行流程
2PC = 准备阶段 (Prepare) + 提交阶段 (Commit),遵循 XA 规范,由事务协调者 TM + ** 多个资源 RM (各个数据库)** 组成。
- 全部 Prepare 成功:TM 下发 commit,各 RM 正式提交事务、释放锁;
- 任一 Prepare 失败:TM 下发 rollback,所有 RM 回滚数据、释放锁。
2. Java 落地实现
- JDBC XA:XADataSource、XAResource(MySQL、Oracle 支持 XA)
- 框架:Atomikos、Bitronix、Narayana(JTA 规范实现),Spring JtaTransactionManager
3. 优缺点
✅优点:强一致性、编程简单,像本地事务一样使用 @Transactional ❌缺点:
4. 适用场景
短事务、少数据源(≤3 个库)、低并发,传统老旧项目,微服务基本弃用。
二、TCC(Try-Confirm-Cancel,侵入代码型柔性事务)
1. 三段式执行流程(业务代码手动编码,无锁)
TCC 把每个微服务拆成Try、Confirm、Cancel三个接口,由事务协调器(Seata-TCC、ByteTCC)调度。
核心:Try 占资源、Confirm 确认、Cancel 补偿回滚,无数据库锁,靠业务状态控制
2. Java 落地
- 框架:Seata TCC、ByteTCC、Hmily
- 编码:每个分布式接口必须实现 3 个方法,侵入业务代码。
3. 优缺点
✅优点:性能高、无长事务锁、一致性可控、无中间件依赖; ❌缺点:代码侵入极强,开发量大,每个接口写 3 套逻辑,开发成本高。





