txlcn-分布式事务管理入门

公司突然有分布式事务的需求,抽空研究一下相关的框架,发现txlcn相对比较成熟。
官方入门文档:https://www.txlcn.org/zh-cn/docs/start.html
这里记录一下接入遇到的坑。

TX-LCN 主要有两个模块,Tx-Client(TC) Tx-Manager™. TC作为微服务下的依赖,TM是独立的服务,主要作为事务管理的控制中心。
txlcn-分布式事务管理入门_第1张图片
发起方发起会缓存事务的gtoupid到tx-manager中,根据最后的处理结果进行commit或者cancel操作。根据官网,tx-manager是支持集群服务的。

TM的准备环境

1、创建MySQL数据库, 名称为: tx-manager的数据库

创建数据表

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、从git上拉取TM的源代码,这里用的版本是5.0.2.RELEASE
地址:https://github.com/codingapi/tx-lcn.git

txlcn-分布式事务管理入门_第2张图片3、拉取的代码结构大概是这样的,其中txlcn-tm就是一开始说到的tx-manager服务,启动前还需要配置下参数。
ps:需要配置redis连接,我是默认连接本地的redis服务,所以不需要配置。
官方TM配置文档:https://www.txlcn.org/zh-cn/docs/setting/manager.html
txlcn-分布式事务管理入门_第3张图片
这里的数据库信息配置成自己的。
启动。
访问 http://127.0.0.1:7970/admin/index.html进入管理后台,默认密码是:codingapi
txlcn-分布式事务管理入门_第4张图片
集成了TC的服务端启动成功后可以点这里查看服务的状态。
具体的Tx-Manager操作,看官网文档吧。
https://www.txlcn.org/zh-cn/docs/manageradmin.html

集成txlcn-tc

本次集成是基于springboot+springcloud+nacos的环境。

1、集成txlcn-tc
添加5.0.2.RELEASE版本的必要依赖

        <!--txlcn5.0.2-->
        <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>

在启动的主类添加@EnableDistributedTransaction注解开启分布式事务。
txlcn-分布式事务管理入门_第5张图片
根据官方文档配置需要的参数,比如tx-manager的服务ip,事务时间,心跳时间等。
官方TC配置文档:https://www.txlcn.org/zh-cn/docs/setting/client.html
默认连接127.0.0.1:8070的tx-manager。

PS:需要注意的是,配置分布式事务的服务也是一定要集成redis,并且和tx-manager要连接同一个redis服务。

2、LCN模式事务

因为LCN的事务管理是基于本地事务的,所以在需要开启事务的service增加注解。


    @Override
    @LcnTransaction
    @Transactional
    public String execute(String value, String exFlag) {
        // step1. call remote ServiceD

        String dResp = restTemplate.getForObject("http://txlcn-demo-spring-service-b/hello/rpc?value=" + value, String.class);

        // step2. call remote ServiceE
        String eResp = serviceCClient.rpc(value);

        // step3. execute local transaction
        Demo demo = new Demo();
        demo.setGroupId(TracingContext.tracing().groupId());
        demo.setDemoField(value);
        demo.setCreateTime(new Date());
        demo.setAppName(Transactions.getApplicationId());
        demoMapper.save(demo);

        // 置异常标志,DTX 回滚
        if (Objects.nonNull(exFlag)) {
            throw new IllegalStateException("by exFlag");
        }

        return dResp + " > " + eResp + " > " + "ok-service-a";
    }

本demo代码地址:https://github.com/jackliunan/txlcn-demo

pps: txlcn官方重新开始维护,维护者群421324785

你可能感兴趣的:(分布式)