写点什么

分布式事务之 TX-LCN

发布于: 刚刚
分布式事务之TX-LCN

什么是 TX-LCN

TX-LCN 定位于一款事务协调性框架,框架其本身并不操作事务,而是基于对事务的协调从而达到事务一致性的效果。

TX-LCN 主要有两个模块,Tx-Client(TC) Tx-Manager(TM). TC 作为微服务下的依赖,TM 是独立的服务。

TX-LCN 原理

  • 核心步骤:

  • 创建事务组:是指在事务发起方开始执行业务代码之前先调用 TxManager 创建事务组对象,然后拿到事务标示 GroupId 的过程。

  • 加入事务组:添加事务组是指参与方在执行完业务方法以后,将该模块的事务信息通知给 TxManager 的操作。

  • 通知事务组:是指在发起方执行完业务代码以后,将发起方执行结果状态通知给 TxManager,TxManager 将根据事务最终状态和事务组的信息来通知相应的参与模块提交或回滚事务, 并返回结果给事务发起方。

TX-LCN 项目调用架构

由项目调用架构图可以看出来,TM需要使用的Redis,所以我们需要准备一台Redis

TM 环境搭建

1、创建一个SpringBoot项目,lcn-tm添加如下依赖,并且在启动类上添加注解@EnableTransactionManagerServer

<dependency>    <groupId>com.codingapi.txlcn</groupId>    <artifactId>txlcn-tm</artifactId>    <version>5.0.2.RELEASE</version></dependency>
<dependency>    <groupId>com.codingapi.txlcn</groupId>    <artifactId>txlcn-tc</artifactId>    <version>5.0.2.RELEASE</version></dependency><dependency>    <groupId>com.codingapi.txlcn</groupId>    <artifactId>txlcn-txmsg-netty</artifactId>    <version>5.0.2.RELEASE</version></dependency>
复制代码

2、创建数据库tx-manager并且执行如下脚本,TM需要 t_tx_exceptiont_logger俩张表

CREATE TABLE `t_tx_exception` (      `id` bigint(20) NOT NULL AUTO_INCREMENT,      `group_id` varchar(32) DEFAULT NULL,      `unit_id` varchar(32) DEFAULT NULL,      `mod_id` varchar(32) DEFAULT NULL,      `transaction_state` tinyint(4) DEFAULT NULL,      `registrar` tinyint(4) DEFAULT NULL COMMENT '-1 未知 0 Manager 通知事务失败, 1 client询问事务状态失败2 事务发起方关闭事务组失败',      `ex_state` tinyint(4) DEFAULT NULL COMMENT '0 待处理 1已处理',      `create_time` datetime DEFAULT NULL,      PRIMARY KEY (`id`) USING BTREE) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC
CREATE TABLE `t_logger` (    `id` bigint(20) NOT NULL AUTO_INCREMENT,    `group_id` varchar(64) NOT NULL,    `unit_id` varchar(32) NOT NULL,    `tag` varchar(50) NOT NULL,    `content` varchar(1024) NOT NULL,    `create_time` varchar(30) NOT NULL,    `app_name` varchar(128) NOT NULL,    PRIMARY KEY (`id`) USING BTREE) ENGINE=InnoDB DEFAULT CHARSET=latin1
复制代码

3、配置TM服务,在项目lcn-tm的配置文件application.properties(注意目前只支持properties文件格式)添加如下配置

server.port=7970
# TM事务管理器,需要访问数据库,实现分布式事务状态记录。spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driverspring.datasource.url=jdbc:mysql://localhost:3306/tx-manager?characterEncoding=UTF-8&serverTimezone=Asia/Shanghaispring.datasource.username=rootspring.datasource.password=root
# TM事务管理器,是依赖Redis使用分布式事务协调的。尤其是TCC和TXC两种事务模型。spring.redis.host=127.0.0.1spring.redis.port=6379spring.redis.database=0

# 为spring应用起名。spring.application.name=tx-lcn-transaction-manager
# TM事务管理器,提供的WEB管理平台的登录密码。无用户名。 默认是codingapitx-lcn.manager.admin-key=triumphxx# 日志。如果需要TM记录日志。则开启,赋值为true,并提供后续的配置。mybatis.configuration.map-underscore-to-camel-case=truemybatis.configuration.use-generated-keys=true# 日志。如果需要TM记录日志。则开启,赋值为true,并提供后续的配置。tx-lcn.logger.enabled=true# TxManager Host Iptx-lcn.manager.host=127.0.0.1# TxClient连接请求端口tx-lcn.manager.port=8070# 心跳检测时间(ms)tx-lcn.manager.heart-time=15000# 分布式事务执行总时间tx-lcn.manager.dtx-time=300000#参数延迟删除时间单位mstx-lcn.message.netty.attr-delay-time=10000tx-lcn.manager.concurrent-level=128# 开启日志logging.level.com.codingapi=debug
#为日志功能,提供数据库连接,和前面的使用的不是一个数据源tx-lcn.logger.driver-class-name=com.mysql.cj.jdbc.Drivertx-lcn.logger.jdbc-url=jdbc:mysql://localhost:3306/tx-manager?characterEncoding=UTF-8&serverTimezone=Asia/Shanghaitx-lcn.logger.username=roottx-lcn.logger.password=root
复制代码

4、启动项目lcn-tm访问http://localhost:7970/出现如下画面,表示TM服务搞定

5、输入配置文件中配置的密码tx-lcn.manager.admin-key=triumphxx就能够登录

以上就是TX-LCN的基本介绍和TM的搭建

TC 环境搭建

由于我们是微服务,所以需要创建一个注册中心,我们就用Eureka来搭建,项目为eureka-server,这里就不赘述了,还需要创建俩个项目来模拟分布式事务的场景,分别为lcn-order订单服务和lcn-pay支付服务。

1、在订单服务支付服务中添加如下依赖,并且在启动类上添加注解@EnableDistributedTransaction表示开启分布式事务

<!--TC依赖 开始--><dependency>    <groupId>com.codingapi.txlcn</groupId>    <artifactId>txlcn-tc</artifactId>    <version>5.0.2.RELEASE</version></dependency>
<dependency>    <groupId>com.codingapi.txlcn</groupId>    <artifactId>txlcn-txmsg-netty</artifactId>    <version>5.0.2.RELEASE</version></dependency><!--TC依赖 结束-->
复制代码

2.配置TC,在yaml文件中接入如下配置,表示连接的TM信息

tx-lcn:  client:    manager-address: 127.0.0.1:8070
复制代码

3、启动TC,登录到TM管理后台可以看到注册的TC,以及点击详细信息可以看到TC的详细信息

  • 注册信息


  • 详细信息


以上就是TX-LCN TC的搭建

总结

以上就是TX-LCN的介绍以及环境的搭建,后面我们讨论TX-LCN的几种模式。


发布于: 刚刚阅读数: 2
用户头像

强化内功、持续改进、不断叠加、保持耐心 2018.03.23 加入

行走在江湖的程序员 个人网站:http://blog.triumphxx.com.cn 微信公众号:北漂码农有话说

评论

发布
暂无评论
分布式事务之TX-LCN