分散式事務(TX-Lcn)簡單使用
阿新 • • 發佈:2019-12-31
原理:
建立一個事務管理組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: 是否丟擲異常
丟擲異常:事務不提交。無資料
不丟擲異常:事務提交。有兩條資料
複製程式碼