TX-LCN框架 分布式事务

一、三种事务模式

1)LCN

基于XA协议,事务提交或回滚的操作由事务管理服务器统一告诉它管理的多个项目,也就是说在A事务,B事务的事务提交操作或回滚操作都是在同一时刻发生,并且要么都提交,要么都回滚。

LCN模式在本地事务的基础上由对事务连接的回滚或提交操作的连接对象的代理对象做出最终事务操作

2)TCC

常用于缓存数据库操作,该事务的提交操作在事务管理服务器告诉它之前,自己由本地事务直接完成事务提交操作,如果事务管理服务器告知需要回滚,那么就执行自己预先写好的回滚方法。

3)TXC

二、分布式事务实现

0)父工程依赖版本

复制代码
<parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.3.12.RELEASE</version>
    </parent>
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>Hoxton.SR12</version>
                <scope>import</scope>
                <type>pom</type>
            </dependency>
            <dependency>
                <groupId>com.codingapi.txlcn</groupId>
                <artifactId>txlcn-tm</artifactId>
                <version>5.0.2.RELEASE</version>
            </dependency>
            <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>
            <dependency>
                <groupId>org.mybatis.spring.boot</groupId>
                <artifactId>mybatis-spring-boot-starter</artifactId>
                <version>2.2.0</version>
            </dependency>
        </dependencies>
    </dependencyManagement>

1)搭建事务管理服务器

依赖坐标

复制代码
  <dependencies>
        <dependency>
            <groupId>com.codingapi.txlcn</groupId>
            <artifactId>txlcn-tm</artifactId>
        </dependency>
    </dependencies>

配置文件和开启启动类注解

复制代码
spring.application.name=TransactionManager
server.port=7970
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/tx-manager?characterEncoding=UTF-8&serverTimezone=Asia/Shanghai
spring.datasource.username=root
spring.datasource.password=root

# redis配置
spring.redis.host=127.0.0.1

# TM服务器IP修改, TC访问TM时,使用的IP地址。必须精确匹配。默认127.0.0.1。代表TC和TM必须在同一个主机中。
tx-lcn.manager.host=127.0.0.1
# TM事务管理端口。默认 0. 是server.port + 100计算得到。
tx-lcn.manager.port=7971
# TM服务器日志系统配置,默认关闭日志系统。需要独立配置日志的存储数据库连接
tx-lcn.logger.enabled=false
# 配置TM服务器日志系统数据库连接
tx-lcn.logger.driver-class-name=com.mysql.cj.jdbc.Driver
tx-lcn.logger.jdbc-url=jdbc:mysql://localhost:3306/tx-manager?characterEncoding=UTF-8&serverTimezone=Asia/Shanghai
tx-lcn.logger.username=root
tx-lcn.logger.password=root
# 自动创建表格的配置项。可以自动创建日志表格。
#spring.jpa.hibernate.ddl-auto=update
# 修改TM服务器的WEB控制台登录密码, 默认登录密码是  codingapi
#tx-lcn.manager.admin-key=wollo

数据库手动创建

管理界面,端口为7970

TxManager系统后台TxManager系统后台



2)分布式事务项目依赖

微服务项目想要实现分布式事务管理,引入该依赖,改动配置文件,别忘了开启分布式事务管理的注解;

要想使用TCC模式,额外配置如redis的启动器依赖即可。

复制代码
         <dependency>
            <groupId>com.codingapi.txlcn</groupId>
            <artifactId>txlcn-tc</artifactId>
        </dependency>
        <dependency>
            <groupId>com.codingapi.txlcn</groupId>
            <artifactId>txlcn-txmsg-netty</artifactId>
        </dependency>




3)项目案例

这里写了一个学生项目,学生的书籍项目,还有一个学生的电话项目;

添加学生的业务远程调用了书籍的服务,电话的服务。

添加学生和添加书籍使用LCN模式,添加电话业务使用TCC模式,

也就是说,有学生表和书籍表,电话存在redis这样的内存数据库中。

①)学生业务层

分布式事务中值得注意的是,如果书籍远程调用出现问题,即使不使用分布式事务管理仍然学生业务回滚;

并且如果redis服务崩了,但其实不影响学生业务,如果都回滚的话会导致所有关联的微服务不可用。

解决这种代码侵入问题和逻辑问题,一是通常指定本地事务的rollbackFor回滚异常;

二是在远程调用方自己捕捉异常处理


②)书籍业务层


③)电话业务层 TCC模式

TCC模式要相对复杂点,因为要编写三个方法,不仅有业务方法,还有预先写好的提交和回滚方法。

提交和回滚方法有命名规范,是业务方法名前加confirm和cancel.

相关推荐
海宇大数据22 分钟前
分布式网格实战:基于海宇柠檬查出险-登记证构建自动化车辆合规网关
运维·人工智能·分布式·自动化
無a伟1 小时前
RabbitMq高级特性:消息确认,持久化,重试机制
java·分布式·rabbitmq
HanhahnaH2 小时前
Spark 任务如何实现幂等?
大数据·分布式·spark
江畔柳前堤21 小时前
云原生 × AI 全景图谱:从 Kubernetes 到 Agent 基础设施的一次认知跃迁
人工智能·分布式·gpt·云原生·kubernetes·原型模式·agi
Thomas21431 天前
kafka 存储flink changelog两种方式和形态
分布式·flink·kafka
GIR1231 天前
首发:2026年分布式储能系统市场分析报告——覆盖发展前景、占有率与十五五规划
分布式
leo_messi941 天前
面试知识点梳理及相关面试题(十六)-- 分布式设计
分布式·面试·职场和发展
IT大白鼠1 天前
MySQL 分布式集群系列 · 第四篇——实操部署指南:从零搭建生产级 MySQL NDB 集群
数据库·分布式·mysql
IT大白鼠1 天前
MySQL 分布式集群系列 · 第三篇——核心原理精讲:NDB 自动分片、多主写入与数据同步
数据库·分布式·mysql
星恒讯工业路由器2 天前
分布式光伏站点分散难联网?4G/5G点对多点自组网方案解析
分布式·物联网·5g·分布式光伏·自组网·点对多点通信·4g/5g