框架介绍
LCN分布式事务框架其本身并不创建事务,而是基于对本地事务的协调从而达到事务一致性的效果
核心步骤
创建事务组
是指在事务发起方开始执行业务代码之前先调用TxManager创建事务组对象,然后拿到事务标示GroupId的过程。
添加事务组
添加事务组是指参与方在执行完业务方法以后,将该模块的事务信息添加通知给TxManager的操作。
关闭事务组
是指在发起方执行完业务代码以后,将发起方执行结果状态通知给TxManager的动作。当执行完关闭事务组的方法以后,TxManager将根据事务组信息来通知相应的参与模块提交或回滚事务。
事务控制原理
事务控制原理
LCN事务控制原理是由事务模块TxClient下的代理连接池与TxManager的协调配合完成的事务协调控制。
TxClient的代理连接池实现了javax.sql.DataSource接口,并重写了close方法,事务模块在提交关闭以后TxClient连接池将执行"假关闭"操作,等待TxManager协调完成事务以后在关闭连接。
LCN 的tx-client包代码的大概执行逻辑
搭建demo的过程遇到了LCN事务无法生效的问题下载官方的demo发现配置大同小异事务是有效的,于是通过阅读LCN的tx-client包的源码,逐步定位,花了大概两周的时间终于定位出来问题的原因Dubbo同时使用@Service和@Transactional注解时服务无法发现
根本原因:
基于cglib或则jdk代理生成的类,获取不到Dubbo的service注解,导致服务无法注册
demo代码地址
maven-parent: 各类常用技术,算法的汇集 - Gitee.com
https://gitee.com/lzhcode/maven-parent/tree/master/lzh-springboot/lzh-springboot-consoumer
maven-parent: 各类常用技术,算法的汇集 - Gitee.com