框架介绍

LCN分布式事务框架其本身并不创建事务,而是基于对本地事务的协调从而达到事务一致性的效果

 

核心步骤

创建事务组
是指在事务发起方开始执行业务代码之前先调用TxManager创建事务组对象,然后拿到事务标示GroupId的过程。
添加事务组
添加事务组是指参与方在执行完业务方法以后,将该模块的事务信息添加通知给TxManager的操作。
关闭事务组
是指在发起方执行完业务代码以后,将发起方执行结果状态通知给TxManager的动作。当执行完关闭事务组的方法以后,TxManager将根据事务组信息来通知相应的参与模块提交或回滚事务。

 

事务控制原理

基于SpringBoot的分布式事务LCN整合分享_Spring 事务控制原理

LCN事务控制原理是由事务模块TxClient下的代理连接池与TxManager的协调配合完成的事务协调控制。

TxClient的代理连接池实现了javax.sql.DataSource接口,并重写了close方法,事务模块在提交关闭以后TxClient连接池将执行"假关闭"操作,等待TxManager协调完成事务以后在关闭连接。

 

LCN 的tx-client包代码的大概执行逻辑

  基于SpringBoot的分布式事务LCN整合分享_Spring_02

 

搭建demo的过程遇到了LCN事务无法生效的问题下载官方的demo发现配置大同小异事务是有效的,于是通过阅读LCN的tx-client包的源码,逐步定位,花了大概两周的时间终于定位出来问题的原因Dubbo同时使用@Service和@Transactional注解时服务无法发现

 

根本原因:

基于cglib或则jdk代理生成的类,获取不到Dubbo的service注解,导致服务无法注册

 

demo代码地址

https://gitee.com/lzhcode/maven-parent/tree/master/lzh-springboot/lzh-spirngboot-openapi

https://gitee.com/lzhcode/maven-parent/tree/master/lzh-springboot/lzh-springboot-consoumer

https://gitee.com/lzhcode/maven-parent/tree/master/lzh-springboot/lzh-springboot-provider