Java基础之《分布式事务(5)—TCC事务原理》

一、分布式事务confirm的底层原理

1、try阶段 try阶段注册事务组

2、confirm阶段 由事务管理器调用confirm方法

二、分布式事务try异常处理

1、如果try出现异常,则会执行cancel方法

因为它通过事务组,trans_id来找到要执行什么cancel方法

2、它是怎么触发异常的 也是AOP切面编程

三、分布式事务confirm异常处理

1、confirm异常

使用定时任务来重试,ScheduledThreadPoolExecutor线程池

2、解决办法 如果遇到一直重试,只能把bug解决了。confirm异常不可能回滚,回滚没用的,只能重试

四、TCC分布式事务日志原理

1、status 0:开始执行try 1:try阶段完成 2:confirm阶段 3:cancel阶段

2、role 1:发起者 2:消费者 3:提供者 4:本地调用 5:内嵌RPC调用 6:SpringCloud

3、订单服务 第一步:try阶段,事务管理器工作 插入订单 事务管理器----> insert into hmily_order_service(...)

说明: invocation 是try的参数二进制数据,作用是传给confirm,cancel status 状态是0 role 角色是1

第二步:confirm阶段,事务管理器工作 update hmily_order_service set status = 2 where trans_id = 11368578258580245705

第三步:分布式事务整体成功后,删除数据 delete from hmily_order_service where trans_id = 11368578258580245705

4、库存服务 第一步:try阶段,事务管理器工作 insert into hmily_inventory_service(...)

说明: status 状态是0 role 角色是3

第二步:confirm的事务管理器工作 update hmily_inventory_service set status = 1 where trans_id = 11368578258580245705 update hmily_inventory_service set status = 2 where trans_id = 11368578258580245705 status先设置为1,再设置为2

第三步:分布式事务整体成功后,再删除日志 delete from hmily_inventory_service where trans_id = 11368578258580245705

5、服务器启动的时候,自动创建数据表结构,例如hmily_order_service

五、TCC分布式事务网络通讯原理

1、订单服务里生成了trans_id,是怎么传给库存服务的 通过反射invoker和拦截器interceptor的原理,将全局事务ID传给了另外一个服务

经验分享 程序员 微信小程序 职场和发展