分布式事务(TX-Lcn)简单使用

原理:

1
2
3
4
复制代码    创建一个事务管理组Tm项目。
LCN把事务注册到Tm中。然后结束后一起提交事务。
TCC先把事务提交。然后错误后进入cl方法中对数据进行修改。
只是简单的使用整理。要深入了解请看官方文档。

文档:

1
2
复制代码    源码地址:https://github.com/codingapi/tx-lcn
中文文档:http://www.txlcn.org/zh-cn/docs/preface.html

步骤:

1
2
3
4
5
6
7
复制代码    1.创建tx-manage数据库和表
2.创建Tm项目。修改配置。
3.启动tm项目,并查看是否成功

4.使用tc并注册到Tm
5.使用@LcnTransaction模式
6.使用@TccTransaction模式

1.创建tx-manage数据库和表

1
2
3
4
5
6
7
8
9
10
11
12
13
复制代码创建数据库和表名
CREATE TABLE `t_tx_exception` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`group_id` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
`unit_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
`mod_id` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
`transaction_state` tinyint(4) NULL DEFAULT NULL,
`registrar` tinyint(4) NULL DEFAULT NULL,
`remark` varchar(4096) NULL DEFAULT NULL,
`ex_state` tinyint(4) NULL DEFAULT NULL COMMENT '0 未解决 1已解决',
`create_time` datetime(0) NULL DEFAULT NULL,
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic;

2.创建Tm项目

1.添加依赖
1
2
3
4
5
6
7
8
9
10
11
12
13
复制代码<!--mysql连接-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.45</version>
</dependency>

<!--分布式事务管理tm-->
<dependency>
<groupId>com.codingapi.txlcn</groupId>
<artifactId>txlcn-tm</artifactId>
<version>${codingapi.txlcn.version}</version>
</dependency>
2.启动类添加@EnableTransactionManagerServer注解

3.修改Tm配置文件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
复制代码server:
port: 7970
spring:
application:
name: tx-manager
datasource:
# mysql数据源
driver-class-name: com.mysql.jdbc.Driver
password: 123456
url: jdbc:mysql://127.0.0.1:3306/tx-manager?characterEncoding=UTF-8
username: root
redis:
# redis数据源 改成自己的。
database: 28
host:
password:
port:
tx-lcn:
manager:
# 登录密码
admin-key: 123456

# 详情可看 http://www.txlcn.org/zh-cn/docs/setting/manager.html
4.Tm项目整体

3.启动项目并查看

1.输入http://localhost:7970/admin/index.html#/login

2.根据配置文件里面admin-key的值。登录进入

4.使用tc并注册到Tm

1.添加依赖(微服务相关的和Mybatis相关的就不说了)
1
2
3
4
5
6
7
8
9
10
11
12
复制代码<!--tc-->
<dependency>
<groupId>com.codingapi.txlcn</groupId>
<artifactId>txlcn-tc</artifactId>
<version>5.0.2.RELEASE</version>
</dependency>
<!--tc与tm通讯-->
<dependency>
<groupId>com.codingapi.txlcn</groupId>
<artifactId>txlcn-txmsg-netty</artifactId>
<version>5.0.2.RELEASE</version>
</dependency>
2.启动类添加@EnableDistributedTransaction注解
3.配置文件编写Tm项目地址。
1
2
3
4
5
复制代码#Tm项目地址。 默认是127.0.0.1:8070,如果再服务器上的话要改成对应的地址。 
#8070是Tm默认的监听端口,需要更改的话去看TM的配置文件信息,TM监听Socket端口. tx-lcn.manager.port=8070。默认是Tm的启动端口+100。虽然文档写的是-100.实际上是+100
tx-lcn:
client:
manager-address: 127.0.0.1:8070
4.启动项目。 查看是否注册到Tm中去。

5.重复1-3步,启动另一个服务。

5.使用@LcnTransaction模式

1.在消费者和提供者方法上都添加上@LcnTransaction注解。
1
2
3
复制代码流程: A: 插入数据a  ->  B: 插入数据b  ->  A: 是否抛出异常
抛出异常:事务不提交。无数据
不抛出异常:事务提交。有两条数据

2.然后测试。不带上ex参数。项目跑成功。并插入了两条数据

3.带上ex参数。项目抛出异常。然后查看数据是否提交(回滚)。发现数据没有改变。说明分布式事务Lcn模式使用成功。

6.使用@LcnTransaction模式

1.流程、逻辑不变。把b项目中的@LcnTransaction换成@TccTransaction注解

2.可以在B项目插入数据后打断点。然后查看数据库。数据是否插入。

3.执行完程序。查看是否进入cf与cl方法。

本文转载自: 掘金

开发者博客 – 和开发相关的 这里全都有

0%