gradle依赖
compile ("org.bytesoft:bytetcc-supports-springcloud:0.4.19")
{ exclude group: 'asm', module: 'asm' }
maven依赖
<dependency>
<groupId>org.bytesoft</groupId>
<artifactId>bytetcc-supports-springcloud</artifactId>
<version>0.4.19</version>
<exclusions>
<exclusion>
<groupId>asm</groupId>
<artifactId>asm</artifactId>
</exclusion>
</dependency>
每个需要用byteTCC功能的服务对应的数据库新增表
CREATE TABLE `bytejta` (
`xid` varchar(32) NOT NULL,
`gxid` varchar(40) DEFAULT NULL,
`bxid` varchar(40) DEFAULT NULL,
`ctime` bigint(20) DEFAULT NULL,
PRIMARY KEY (`xid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
TCC事务正常流程
A服务Try阶段失败B服务成功
A服务Try成功B服务Try失败
如果Confirm失败 协调器会记录Confirm错误记录到本地文件缓存,会有一个守护线程会去重试执行到成功为止,(即便服务宕机重启后也能重新执行)
A服务API层代码
A服务Try代码
A服务Cancel代码
B服务API Try代码
B服务Cancel代码
这个案例里没有展示Confirm的代码,因为Confirm的操作不在Cancel回滚范围内,TCC的协调器会保证Confirm的操作一定会重试最后执行成功。