2000字范文,分享全网优秀范文,学习好帮手!
2000字范文 > 分布式事务框架TX-LCN

分布式事务框架TX-LCN

时间:2024-01-11 04:25:30

相关推荐

分布式事务框架TX-LCN

TX-LCN 主要有两个模块:

Tx-Client(TC):每个微服务都可以是一个TC,只需引入TC的依赖

Tx-Manager(TM):TM是独立的微服务,注册到注册中心

搭建步骤:

一Tx-Manager服务搭建

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

CREATE DATABASE IF NOT EXISTS `tx-manager` DEFAULT CHARSET utf8 COLLATE utf8_general_ci;USE `tx-manager`;SET NAMES utf8mb4;SET FOREIGN_KEY_CHECKS = 0;DROP TABLE IF EXISTS `t_tx_exception`;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,`ex_state` tinyint(4) NULL DEFAULT NULL COMMENT '0 待处理 1已处理',`remark` varchar(10240) NULL DEFAULT NULL COMMENT '备注',`create_time` datetime(0) NULL DEFAULT NULL,PRIMARY KEY (`id`) USING BTREE) ENGINE = InnoDB AUTO_INCREMENT = 967 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic;SET FOREIGN_KEY_CHECKS = 1;

创建TM微服务,使用SpringBoot创建工程

添加依赖

<!-- text报错,添加一下依赖--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><!-- 参照例子引入需要的依赖jar --><dependency><groupId>com.codingapi.txlcn</groupId><artifactId>txlcn-tm</artifactId><version>5.0.2.RELEASE</version></dependency>

修改application.properties文件,Tx-Manager需要中间件redis的支持

spring.application.name=TransactionManagerserver.port=7970eureka.client.serviceUrl.defaultZone=http://127.0.0.1:5001/eureka/eureka/spring.datasource.driver-class-name=com.mysql.jdbc.Driverspring.datasource.url=jdbc:mysql://127.0.0.1:3306/tx-manager?characterEncoding=UTF-8spring.datasource.username=rootspring.datasource.password=rootspring.jpa.database-platform=org.hibernate.dialect.MySQL5InnoDBDialectspring.jpa.hibernate.ddl-auto=updatelogging.file=tx-manage.logmybatis.configuration.map-underscore-to-camel-case=truemybatis.configuration.use-generated-keys=true# TM监听IP. 默认为 127.0.0.1tx-lcn.manager.host=127.0.0.1# TM监听Socket端口. 默认为 ${server.port} - 100tx-lcn.manager.port=8070# 心跳检测时间(ms). 默认为 300000tx-lcn.manager.heart-time=300000# 分布式事务执行总时间(ms). 默认为36000tx-lcn.manager.dtx-time=8000# 参数延迟删除时间单位ms 默认为dtx-time值tx-ty.attr-delay-time=${tx-lcn.manager.dtx-time}# 事务处理并发等级. 默认为机器逻辑核心数5倍tx-lcn.manager.concurrent-level=160# TM后台登陆密码,默认值为codingapitx-lcn.manager.admin-key=123456# 分布式事务锁超时时间 默认为-1,当-1时会用tx-lcn.manager.dtx-time的时间tx-lcn.manager.dtx-lock-time=${tx-lcn.manager.dtx-time}# 雪花算法的sequence位长度,默认为12位.tx-lcn.manager.seq-len=12# 异常回调开关。开启时请制定ex-urltx-lcn.manager.ex-url-enabled=.codingapi=debug# 开启日志,默认为falsetx-lcn.logger.enabled=truetx-lcn.logger.driver-class-name=${spring.datasource.driver-class-name}tx-lcn.logger.jdbc-url=${spring.datasource.url}tx-lcn.logger.username=${spring.datasource.username}tx-lcn.logger.password=${spring.datasource.password}# redis 的设置信息. 线上请用Redis Clusterspring.redis.cluster.nodes=127.0.0.1:7001,127.0.0.1:7002,127.0.0.1:7003,127.0.0.1:7004spring.redis.password=123456#最大重定向次数 不小于主节点数spring.redis.cluster.max-redirects=4jedis.pool.config.maxTotal=8jedis.pool.config.maxWaitMillis=5000jedis.pool.config.maxIdle=1# 连接超时时间(毫秒)spring.redis.timeout=3000ms# Redis数据库索引(默认为0)spring.redis.database=0#单节点redis配置#spring.redis.host=127.0.0.1#spring.redis.port=6379#spring.redis.password=

5.在启动类添加注解 @EnableTransactionManagerServer

import com.codingapi.txlcn.tm.config.EnableTransactionManagerServer;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;import org.springframework.cloud.client.discovery.EnableDiscoveryClient;@SpringBootApplication@EnableDiscoveryClient@EnableTransactionManagerServerpublic class TxManageApplication {public static void main(String[] args) {SpringApplication.run(TxManageApplication.class, args);}}

Tx-Client微服务改造

1.引入依赖

<!-- springcloud 分布式事物 --><dependency><groupId>com.codingapi.txlcn</groupId><artifactId>txlcn-tc</artifactId><version>5.0.2.RELEASE</version><exclusions><exclusion><groupId>com.google.guava</groupId><artifactId>guava</artifactId></exclusion></exclusions></dependency><dependency><groupId>com.codingapi.txlcn</groupId><artifactId>txlcn-txmsg-netty</artifactId><version>5.0.2.RELEASE</version><exclusions><exclusion><groupId>com.google.guava</groupId><artifactId>guava</artifactId></exclusion></exclusions></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-jdbc</artifactId></dependency>

2.配置文件添加TM地址、监听端口,如果TM是默认8070端口,且跟TC部署在同一台机器,可以忽略这个配置,并且开启日志,开发阶段最好开启日志,并设置为debug等级,这样方便追踪排查问题

# 是否启动LCN负载均衡策略(优化选项,开启与否,功能不受影响)tx-lcn.ribbon.loadbalancer.dtx.enabled=true# tx-manager 的配置地址,可以指定TM集群中的任何一个或多个地址# tx-manager 下集群策略,每个TC都会从始至终<断线重连>与TM集群保持集群大小个连接。# TM方,每有TM进入集群,会找到所有TC并通知其与新TM建立连接。# TC方,启动时按配置与集群建立连接,成功后,会再与集群协商,查询集群大小并保持与所有TM的连接tx-lcn.client.manager-address=127.0.0.1:8070# 开启日志,默认为falsetx-lcn.logger.enabled=truetx-lcn.logger.driver-class-name=${spring.datasource.driver-class-name}tx-lcn.logger.jdbc-url=${spring.datasource.url}tx-lcn.logger.username=${spring.datasource.username}tx-lcn.logger.password=${spring.datasource.password}.codingapi.txlcn=DEBUG

3.在启动类上使用 @EnableDistributedTransaction

4.在事务的发起方法上添加@LcnTransaction分布式事务注解,在被调用的服务方法上添加@LcnTransaction或@TxcTransaction或@TccTransaction

PS:@LcnTransaction,@TxcTransaction,@TccTransaction的target是在方法上的

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。