JavaJVM · Java虚拟机原理 · JVM上语言·框架· 生态系统Java服务器端编程

LCN-核心源码分析

2021-09-30  本文已影响0人  迦叶_金色的人生_荣耀而又辉煌

上一篇 <<<SpringBoot整合LCN
下一篇 >>>LCN-集群模式介绍


订单服务和库存服务交互图

执行步骤说明

a、使用@LcnTransaction注解会走到AOP类TransactionAspect
b、发起方会创建事务组ID,并同步到协调者管理器中,开启事务并执行具体的业务操作
c、如果业务操作里含有feign的请求,则重写feign的拦截器FeignTracingTransmitter,将组ID信息写到头部
d、参与方有拦截器SpringTracingApplier从请求头中获取事务分组ID写到ThreadLocal中。
e、参与方也会使用@LcnTransaction注解会走到AOP类TransactionAspect
f、参与方有了事务组ID后,会加入到当前组中,并通知给协调者,业务执行完毕后会进行假关闭
g、当发起方和参与方都执行完毕后,或中间有回滚时,发起方通知协调者进行全组的回滚或提交

LcnTransaction注解思维导图

表格说明

发起方 参与方
类名 LcnStartingTransaction LcnRunningTransaction
业务前置方法
preBusinessCode
// 创建分组 createGroup
//设置代理makeProxy();
//加入代理后面假关闭 makeProxy();
onBusinessCodeError //设置失败
DTXLocalContext.cur().setSysTransactionState(0);
//设置失败
transactionCleanTemplate.clean(info.getGroupId(), info.getUnitId(), info.getTransactionType(), 0);
onBusinessCodeSuccess //设置成功,事务提交
DTXLocalContext.cur().setSysTransactionState(1);
//当前成功,设置假关闭
transactionControlTemplate.notifyGroup(
info.getGroupId(), info.getUnitId(), info.getTransactionType(),
DTXLocalContext.transactionState(globalContext.dtxState(info.getGroupId())));
postBusinessCode //发起方才有权限通知事务提交或回滚
notifyGroup(globalContext.dtxState(groupId))
-

推荐阅读:
<<<分布式事务产生的背景
<<<解决分布式事务的核心思路
<<<柔性事务和刚性事务(ACID)
<<<CAP理论简单概况
<<<Base理论核心思想
<<<一致性协议--XA接口
<<<一致性协议--Jta规范
<<<一致性协议--2PC提交协议
<<<一致性协议--3PC提交协议
<<<2PC与3PC协议的提交区别
<<<主流的分布式事务解决框架
<<<LCN-框架介绍
<<<LCN-实现原理剖析
<<<LCN-事务协调者(TM)安装启动
<<<SpringBoot整合LCN
<<<LCN-集群模式介绍
<<<Seata-框架介绍
<<<Seata原理实现/执行流程/生命周期
<<<Seata-TM执行时突然宕机了会造成什么问题
<<<Seata-核心源码分析
<<<SpringBoot整合Seata
<<<Seata与Lcn的区别

上一篇下一篇

猜你喜欢

热点阅读