1. 程式人生 > 程式設計 >分散式事務(TX-Lcn)簡單使用

分散式事務(TX-Lcn)簡單使用

原理:

    建立一個事務管理組Tm專案。
    LCN把事務註冊到Tm中。然後結束後一起提交事務。
    TCC先把事務提交。然後錯誤後進入cl方法中對資料進行修改。
    只是簡單的使用整理。要深入瞭解請看官方檔案。 
複製程式碼

檔案:

    原始碼地址:https://github.com/codingapi/tx-lcn
    中文檔案:http://www.txlcn.org/zh-cn/docs/preface.html
複製程式碼

步驟:

    1.建立tx-manage資料庫和表
    2.建立Tm專案。修改配置。
    3.啟動tm專案,並檢視是否成功
    
    4.使用tc並註冊到Tm
    5.使用@LcnTransaction模式
    6.使用@TccTransaction模式
複製程式碼

1.建立tx-manage資料庫和表

建立資料庫和表名
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.建立Tm專案

1.新增依賴
<!--mysql連線-->
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>5.1.45</version>
</dependency>

<!--分散式事務管理tm-->
<dependency>
    <groupId>com.codingapi.txlcn</groupId>
    <artifactId>txlcn-tm</artifactId>
    <version>${codingapi.txlcn.version}
</version> </dependency> 複製程式碼
2.啟動類新增@EnableTransactionManagerServer註解

3.修改Tm配置檔案
server:
    port: 7970
spring:
    application:
        name: tx-manager
    datasource:
        # mysql資料來源
        driver-class-name: com.mysql.jdbc.Driver
        password: 123456
        url: jdbc:mysql://127.0.0.1:3306/tx-manager?characterEncoding=UTF-8
        username: root
    redis:
        # redis資料來源 改成自己的。
        database: 28
        host: 
        password: 
        port:
tx-lcn:
    manager:
        # 登入密碼
        admin-key: 123456

# 詳情可看 http://www.txlcn.org/zh-cn/docs/setting/manager.html
複製程式碼
4.Tm專案整體

3.啟動專案並檢視

1.輸入http://localhost:7970/admin/index.html#/login

2.根據配置檔案裡面admin-key的值。登入進入

4.使用tc並註冊到Tm

1.新增依賴(微服務相關的和Mybatis相關的就不說了)
<!--tc-->
<dependency>
    <groupId>com.codingapi.txlcn</groupId>
    <artifactId>txlcn-tc</artifactId>
    <version>5.0.2.RELEASE</version>
</dependency>
<!--tc與tm通訊-->
<dependency>
    <groupId>com.codingapi.txlcn</groupId>
    <artifactId>txlcn-txmsg-netty</artifactId>
    <version>5.0.2.RELEASE</version>
</dependency>
複製程式碼
2.啟動類新增@EnableDistributedTransaction註解
3.配置檔案編寫Tm專案地址。
#Tm專案地址。 預設是127.0.0.1:8070,如果再伺服器上的話要改成對應的地址。 
#8070是Tm預設的監聽埠,需要更改的話去看TM的配置檔案資訊,TM監聽Socket埠. tx-lcn.manager.port=8070。預設是Tm的啟動埠+100。雖然檔案寫的是-100.實際上是+100
tx-lcn:
  client:
    manager-address: 127.0.0.1:8070
複製程式碼
4.啟動專案。 檢視是否註冊到Tm中去。

5.重複1-3步,啟動另一個服務。

5.使用@LcnTransaction模式

1.在消費者和提供者方法上都新增上@LcnTransaction註解。
流程: A: 插入資料a  ->  B: 插入資料b  ->  A: 是否丟擲異常
    丟擲異常:事務不提交。無資料
    不丟擲異常:事務提交。有兩條資料
複製程式碼

2.然後測試。不帶上ex引數。專案跑成功。並插入了兩條資料

3.帶上ex引數。專案丟擲異常。然後檢視資料是否提交(回滾)。發現資料沒有改變。說明分散式事務Lcn模式使用成功。

6.使用@LcnTransaction模式

1.流程、邏輯不變。把b專案中的@LcnTransaction換成@TccTransaction註解

2.可以在B專案插入資料後打斷點。然後檢視資料庫。資料是否插入。

3.執行完程式。檢視是否進入cf與cl方法。