分布式事務之TX-LCN


什么是TX-LCN

TX-LCN定位於一款事務協調性框架,框架其本身並不操作事務,而是基於對事務的協調從而達到事務一致性的效果。

TX-LCN 主要有兩個模塊,Tx-Client(TC) Tx-Manager(TM). TC作為微服務下的依賴,TM是獨立的服務。

TX-LCN原理

  • 核心步驟:
  • 創建事務組: 是指在事務發起方開始執行業務代碼之前先調用TxManager創建事務組對象,然后拿到事務標示GroupId的過程。
  • 加入事務組: 添加事務組是指參與方在執行完業務方法以后,將該模塊的事務信息通知給TxManager的操作。
  • 通知事務組: 是指在發起方執行完業務代碼以后,將發起方執行結果狀態通知給TxManager,TxManager將根據事務最終狀態和事務組的信息來通知相應的參與模塊提交或回滾事務, 並返回結果給事務發起方。

TX-LCN項目調用架構

由項目調用架構圖可以看出來,TM需要使用的Redis,所以我們需要准備一台Redis

TM環境搭建

1、創建一個SpringBoot項目,lcn-tm添加如下依賴,並且在啟動類上添加注解@EnableTransactionManagerServer

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

<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>

2、創建數據庫tx-manager並且執行如下腳本,TM需要 t_tx_exceptiont_logger倆張表

CREATE TABLE `t_tx_exception` (
      `id` bigint(20NOT NULL AUTO_INCREMENT,
      `group_id` varchar(32DEFAULT NULL,
      `unit_id` varchar(32DEFAULT NULL,
      `mod_id` varchar(32DEFAULT NULL,
      `transaction_state` tinyint(4DEFAULT NULL,
      `registrar` tinyint(4DEFAULT NULL COMMENT '-1 未知 0 Manager 通知事務失敗, 1 client詢問事務狀態失敗2 事務發起方關閉事務組失敗',
      `ex_state` tinyint(4DEFAULT NULL COMMENT '0 待處理 1已處理',
      `create_time` datetime DEFAULT NULL,
      PRIMARY KEY (`id`USING BTREE
ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC

CREATE TABLE `t_logger` (
    `id` bigint(20NOT NULL AUTO_INCREMENT,
    `group_id` varchar(64NOT NULL,
    `unit_id` varchar(32NOT NULL,
    `tag` varchar(50NOT NULL,
    `content` varchar(1024NOT NULL,
    `create_time` varchar(30NOT NULL,
    `app_name` varchar(128NOT NULL,
    PRIMARY KEY (`id`USING BTREE
ENGINE=InnoDB DEFAULT CHARSET=latin1

3、配置TM服務,在項目lcn-tm的配置文件application.properties(注意目前只支持properties文件格式)添加如下配置

server.port=7970

TM事務管理器,需要訪問數據庫,實現分布式事務狀態記錄。

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

TM事務管理器,是依賴Redis使用分布式事務協調的。尤其是TCC和TXC兩種事務模型。

spring.redis.host=127.0.0.1
spring.redis.port=6379
spring.redis.database=0

為spring應用起名。

spring.application.name=tx-lcn-transaction-manager

TM事務管理器,提供的WEB管理平台的登錄密碼。無用戶名。 默認是codingapi

tx-lcn.manager.admin-key=triumphxx

日志。如果需要TM記錄日志。則開啟,賦值為true,並提供后續的配置。

mybatis.configuration.map-underscore-to-camel-case=true
mybatis.configuration.use-generated-keys=true

日志。如果需要TM記錄日志。則開啟,賦值為true,並提供后續的配置。

tx-lcn.logger.enabled=true

TxManager Host Ip

tx-lcn.manager.host=127.0.0.1

TxClient連接請求端口

tx-lcn.manager.port=8070

心跳檢測時間(ms)

tx-lcn.manager.heart-time=15000

分布式事務執行總時間

tx-lcn.manager.dtx-time=300000

參數延遲刪除時間單位ms

tx-lcn.message.netty.attr-delay-time=10000
tx-lcn.manager.concurrent-level=128

開啟日志

logging.level.com.codingapi=debug

為日志功能,提供數據庫連接,和前面的使用的不是一個數據源

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

4、啟動項目lcn-tm訪問http://localhost:7970/出現如下畫面,表示TM服務搞定

5、輸入配置文件中配置的密碼tx-lcn.manager.admin-key=triumphxx就能夠登錄

以上就是TX-LCN的基本介紹和TM的搭建

TC環境搭建

由於我們是微服務,所以需要創建一個注冊中心,我們就用Eureka來搭建,項目為eureka-server,這里就不贅述了,還需要創建倆個項目來模擬分布式事務的場景, 分別為lcn-order訂單服務和lcn-pay支付服務。

1、在訂單服務支付服務中添加如下依賴,並且在啟動類上添加注解@EnableDistributedTransaction表示開啟分布式事務


<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>

2.配置TC,在yaml文件中接入如下配置,表示連接的TM信息

tx-lcn:
  client:
    manager-address: 127.0.0.1:8070

3、啟動TC,登錄到TM管理后台可以看到注冊的TC,以及點擊詳細信息可以看到TC的詳細信息

  • 注冊信息

  • 詳細信息

以上就是TX-LCN TC的搭建

總結

以上就是TX-LCN的介紹以及環境的搭建,后面我們討論TX-LCN的幾種模式。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM