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

原理:

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

文档:

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

步骤:

    1.创建tx-manage数据库和表
    2.创建Tm项目。修改配置。
    3.启动tm项目,并查看是否成功
    
    4.使用tc并注册到Tm
    5.使用@LcnTransaction模式
    6.使用@TccTransaction模式
复制代码

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

创建数据库和表名
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.添加依赖
<!--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配置文件
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相关的就不说了)
<!--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项目地址。
#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注解。
流程: A: 插入数据a  ->  B: 插入数据b  ->  A: 是否抛出异常
    抛出异常:事务不提交。无数据
    不抛出异常:事务提交。有两条数据
复制代码

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

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

6.使用@LcnTransaction模式

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

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

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

猜你喜欢

转载自juejin.im/post/5d68eeb45188252bd90f5f32