1、LCN框架的由来对于设计框架的最初版本1.0 ~ 2.0,框架设计的步骤如下,对从各自的首字母字符得到的LCN进行命名。
锁定事务单元(lock )确认事务模块状态(confirm )通知事务) notify ) 2、LCN框架相关资料tx-lcn官方地址: https://www.txlcn.org/
tx-lcn Github地址: https://github.com/coding API/tx-lcn
tx-lcn服务下载地址: https://pan.Baidu.com/s/1 clk aee # list/path=/
tx-lcn服务源地址: https://github.com/coding API/tx-lcn/tree/master/tx-manager
3、LCN框架核心执行步骤创建事务组:
在事务启动者开始执行业务代码之前,调用TxManager创建事务组对象并获取事务标签GroupId的过程。
添加事务组:
添加事务组是指参与者执行业务方法后,向TxManager添加该模块的事务信息的操作。
关闭事务组:
启动器运行业务代码后,一种操作,用于通知TxManager启动器运行结果的状态。 当您执行关闭事务组的方法时,TxManager会根据事务组的信息通知参与模块提交或回退事务。
4、建立LCN APP应用4.1、tx-manager服务lcn通过独立的微服务tx-manager作为分布式事务控制服务端(事务协调器)。 所有需要分布式事务控制的微服务APP应用程序都使用远程服务调用在tx-manager中标记事务组,并在执行事务后将本地事务的状态标记为tx-manager的相应事务
tx-manager也是使用Spring Cloud开发的微服务APP,在构建过程中非常简单。
下载tx-manager事务协调器zip压缩包:
3359 pan.Baidu.com/s/1 clk aee # list/path=/
压缩包解压缩后的内容如下。
修改application.properties配置文件以提供本地微服务APP应用程序的Eureka注册中心配置和redis配置。 其中redis是事务协调器在处理事务组时使用的临时存储。
# # # # 不能更改spring.resources.static # # # # # # # # # txmanager-end # # # # # # # # # # eureka地址eureka. # # # # redis spring.redis.database=0spring.redis.time out=0spring.redis.host=192.168.1.136 spring.redis.port . redis.pool.min-idle=50 spring.redis.pool.ti idle # # # # # # # # # # # # TM.transaction.net ty.delay time=5tm.transaction.net ty.heart time=15tm.redis.save maxtime=30tm.socket.port port/pat htm.com pensate.try time=30tm.com pensate.max wait time
el.com.codingapi=debug
将修改后的 application.properties 配置文件打包到 tx-manager-x.x.x.jar 中,替代jar中原有的默认配置文件。
使用命令: java -jar tx-manager-x.x.x.jar 启动微服务。
测试tx-manager事务协调器是否启动成功可以访问 http://ip:8899/ 。如下结果代表事务协调器启动成功:
4.2、在微服务中使用LCN实现分布式事务管理
在所有需要处理分布式事务的微服务中增加下述依赖:为统一资源版本,使用 properties 统一管理版本信息。
<properties><lcn.last.version>4.1.0</lcn.last.version></properties><dependencies><dependency><groupId>com.codingapi</groupId><artifactId>transaction-springcloud</artifactId><version>${lcn.last.version}</version><exclusions><exclusion><groupId>org.slf4j</groupId><artifactId>*</artifactId></exclusion></exclusions></dependency><dependency><groupId>com.codingapi</groupId><artifactId>tx-plugins-db</artifactId><version>${lcn.last.version}</version><exclusions><exclusion><groupId>org.slf4j</groupId><artifactId>*</artifactId></exclusion></exclusions></dependency></dependencies>
在全局配置文件中增加下述配置:
# 定义事务协调器所在位置。根据具体环境定义其中的IP地址和端口。tm.manager.url=http://127.0.0.1:8899/tx/manager/
使用LCN做分布式事务管理时,微服务应用内必须提供一个用于获取 txUrl( txUrl就是全局配置文件中定义的 tm.manager.url )的类型实现,这个类可以使用独立应用定义,在微服务应用中引入。
本案例中为了方便,直接在所有的微服务应用中提供对应代码实现。具体如下:
@Servicepublic class TxManagerTxUrlServiceImpl implements TxManagerTxUrlService {@Value(“${tm.manager.url}”)private String url;@Overridepublic String getTxUrl() {return url;}}
在分布式事务管理代码中增加注解 @TxTransaction 。在业务调用方增加的注解需要属性isStart=true 。而被调用方则不需要定义任何的注解属性。
如:交易服务调用了订单服务,那么交易服务中代码:
@TxTransaction(isStart=true)@Transactionalpublic void trade() { //本地调用 tradeDao.save(); //远程调用方 orderService.order();}
订单服务中代码:
@Transactional@TxTransactionpublic void order() { //本地调用 orderDao.save();}