TX-LCN分布式事务框架5.0.2的使用

一、TM配置与启动

TM的准备环境

安装TM需要依赖的中间件: JRE1.8+, Mysql5.6+, Redis3.2+(4.0的也是也可以)
如果需要手动编译源码, 还需要Git, Maven, JDK1.8+(我没有使用Git使用的cmd)

  1. 创建MySQL数据库, 名称为: tx-manager
  2. 创建数据表
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;

如果执行sql失败,把

`create_time` datetime(0) NULL DEFAULT NULL

修改为

`create_time` datetime NULL DEFAULT NULL

TM下载与配置

  1. 下载tx-lcn-5.0.2.RELEASE.zip
    https://pan.baidu.com/s/15pfrBFs9DAVycGs-npP0GQ

  2. 解压修改 txlcn-tm中的pom.xml
    TX-LCN分布式事务框架5.0.2的使用_第1张图片
    加入

			<plugin>
				<groupId>org.springframework.bootgroupId>
				<artifactId>spring-boot-maven-pluginartifactId>
			plugin>
  1. 修改 tx-lcn-5.0.2.RELEASE\txlcn-tm\src\main\resources 中的 application.properties
    数据库和redis根据自己的配置
spring.application.name=TransactionManager
server.port=7970
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/tx-manager?characterEncoding=UTF-8
spring.datasource.username=root
spring.datasource.password=123456
spring.jpa.database-platform=org.hibernate.dialect.MySQL5InnoDBDialect
spring.jpa.hibernate.ddl-auto=update

#redis主机地址
spring.redis.host=127.0.0.1
#redis主机端口
spring.redis.port=6379
  1. 使用maven打包(前提下载了maven并配置了环境变量)
    我是使用cmd到达 txlcn-tm 目录下输入mvn clean package -Dmaven.test.skip=true
    在这里插入图片描述
    回车
    如下图则编译打包成功
    TX-LCN分布式事务框架5.0.2的使用_第2张图片
    可以看到target目录下的txlcn-tm-5.0.2.RELEASE.jar
  2. 启动 txlcn-tm-5.0.2.RELEASE.jar必须先启动redis
    cmd到达 tx-lcn-5.0.2.RELEASE\txlcn-tm\target 目录 输入java -jar txlcn-tm-5.0.2.RELEASE.jar
    在这里插入图片描述
    回车
    如下图则启动成功
    TX-LCN分布式事务框架5.0.2的使用_第3张图片访问端口为:7970
    TX-LCN分布式事务框架5.0.2的使用_第4张图片
    访问地址:http://localhost:7970
    默认密码:codingapi
    TX-LCN分布式事务框架5.0.2的使用_第5张图片TX-LCN分布式事务框架5.0.2的使用_第6张图片到此TM部署成功

二、TC微服务模块

微服务示例架构
TX-LCN分布式事务框架5.0.2的使用_第7张图片
服务A作为DTX发起方,远程调用服务B

TC引入pom依赖

        <dependency>
            <groupId>com.codingapi.txlcngroupId>
            <artifactId>txlcn-tcartifactId>
            <version>5.0.2.RELEASEversion>
        dependency>

        <dependency>
            <groupId>com.codingapi.txlcngroupId>
            <artifactId>txlcn-txmsg-nettyartifactId>
            <version>5.0.2.RELEASEversion>
        dependency>

TC开启分布式事务注解

在主类上使用@EnableDistributedTransaction

@SpringBootApplication
@EnableDistributedTransaction
public class DemoAApplication {

    public static void main(String[] args) {
        SpringApplication.run(DemoDubboClientApplication.class, args);
    }

}

TC微服务A业务方法配置

@Service
public class ServiceA {
    
    @Autowired
    private ValueDao valueDao; //本地db操作
    
    @Autowired
    private ServiceB serviceB;//远程B模块业务
    
    @LcnTransaction //分布式事务注解
    @Transactional //本地事务注解
    public String execute(String value) throws BusinessException {
        // step1. call remote service B
        String result = serviceB.rpc(value);  // (1)
        // step2. local store operate. DTX commit if save success, rollback if not.
        valueDao.save(value);  // (2)
        valueDao.saveBackup(value);  // (3)
        return result + " > " + "ok-A";
    }
}

TC微服务B业务方法配置

@Service
public class ServiceB {
    
    @Autowired
    private ValueDao valueDao; //本地db操作
    
    @LcnTransaction //分布式事务注解
    @Transactional  //本地事务注解
    public String rpc(String value) throws BusinessException {
        valueDao.save(value);  // (4)
        valueDao.saveBackup(value);  // (5)
        return "ok-B";
    }
}

TC配置信息说明

# 默认之配置为TM的本机默认端口
tx-lcn.client.manager-address=127.0.0.1:8070 

官网:https://www.txlcn.org
github:https://github.com/codingapi/tx-lcn
留言区:https://github.com/codingapi/tx-lcn/issues/7
视频教程:https://www.bilibili.com/video/BV1cb411U7g6?from=search&seid=5411458233554449964
框架开发者bilibili账号:https://space.bilibili.com/386239614?spm_id_from=333.788.b_765f7570696e666f.2

你可能感兴趣的:(TX-LCN分布式事务框架,SpringCloud)