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传给了另外一个服务