springcloud分散式事務處理 LCN
一、目前使用的是Tx-LCN處理分散式事務。
二、TX-LCN官網http://www.txlcn.org/zh-cn/index.html,需要詳細資料的可以去查閱。一直在更新。
三、準備環境,windows10+springboot2.0.*以上+springcloud+eureka+redis3.2+mysql5.6+feign
四、我的Mysql 和redis都是用的阿里雲的伺服器上,你們可以根據你們自己的需求配置。
五、準備上號上面的環境以後,就開始搭建Tx-Manager了,搭建步驟如下:
1.先新建一個springboot模組
2.在pom檔案中新增maven依賴:
<dependency>
<groupId>com.codingapi.txlcn</groupId>
<artifactId>txlcn-tm</artifactId>
<version>5.0.2.RELEASE</version>
</dependency>
3.在啟動類上新增註解
@EnableTransactionManagerServer
@SpringBootApplication
@EnableTransactionManagerServer
public class TransactionManagerApplication {
public static void main(String[] args) {
SpringApplication.run(TransactionManagerApplication.class, args);
}
}
4.填寫配置
填寫配置前,先在mysql上建立一個資料庫,名稱為: tx-manager
建立資料表:
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;
根據你自己環境配置,主要是資料庫地址和註冊中心的地址
spring.application.name=tx-manager
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
spring.datasource.username=root
spring.datasource.password=root
#指定註冊中心地址
eureka.client.serviceUrl.defaultZone= http://localhost:8761/eureka/
eureka.instance.instance-id=${spring.cloud.client.ip-address}:${server.port}
eureka.instance.prefer-ip-address=true
mybatis.configuration.map-underscore-to-camel-case=true
mybatis.configuration.use-generated-keys=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=30000
#引數延遲刪除時間單位ms
tx-lcn.message.netty.attr-delay-time=10000
tx-lcn.manager.concurrent-level=128
# 開啟日誌
tx-lcn.logger.enabled=true
logging.level.com.codingapi=debug
#redis 主機
spring.redis.host=127.0.0.1
#redis 埠
spring.redis.port=6379
#redis 密碼
spring.redis.password=
5.到此你的tm已經配置完成了,啟動這個服務,開啟瀏覽器訪問http://localhost:7970/admin/index.html#/login
你可以看到tx-manager的後臺管理,類似註冊中心那種,可以看到你有哪些服務需要做事務處理的。登入的預設密碼為codingapi
已註冊的TC就是你要做事務的客服端,這裡稱為tc-client
六、配置tc-client
就是你要做事務的哪些微服務
在你要做事務處理的每一個tc-client中新增如下maven依賴
<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>
然後在啟動類上加入註解
@EnableDistributedTransaction
@SpringBootApplication
@EnableDistributedTransaction
public class DemoAApplication {
public static void main(String[] args) {
SpringApplication.run(DemoDubboClientApplication.class, args);
}
}
然後在你需要做的事務事務的方法上加入註解@LcnTransaction //分散式事務註解
比如:這裡兩個服務,A服務給B服務轉錢,A服務減一百,B服務加一百。這個處理就需要做事務處理了,以保證資料的一致性。
那在A服務Service層上加入註解@LcnTransaction,A的服務層去呼叫B服務,在B服務中的service成也需要加上@LcnTransaction註解。
在你處理的整個業務的時候,如果需要事務處理,那你就得在再涉及到你這個業務所有服務的所對應的處理的service層加上註解。
最後說一下,在每一個tc-client配置檔案中需要制定tx-manager的地址,因為我用的是預設配置,所以沒有寫。若有修改tx-manager 在tc-client中新增如下配置
預設之配置為TM的本機預設埠
tx-lcn.client.manager-address=127.0.0.1:8070
七、在github寫了一個demo 感興趣的朋友可以去看看;github地址:https://github.com/shenyuewang/springcloud-lcn
第一次寫CSDN有做的不好的,希望各位大佬指出,也希望各位小夥伴多多來交流
相關文章
- SpringCloud系列——TX-LCN分散式事務管理SpringGCCloud分散式
- TX-LCN分散式事務之LCN模式分散式模式
- SpringCloud Alibaba Seata處理分散式事務SpringGCCloud分散式
- TX-LCN分散式事務使用方案分散式
- 分散式事務處理方案,微服事務處理方案分散式
- Laravel 分散式事務處理Laravel分散式
- 分散式事務故障處理分散式
- SpringCloud(六)分散式事務SpringGCCloud分散式
- Oracle分散式事務典型案例處理Oracle分散式
- 阿里是如何處理分散式事務的阿里分散式
- SQL Server分散式事務處理(MS DTC)SQLServer分散式
- SpringCloud 分散式事務解決方案SpringGCCloud分散式
- 分散式事務 —— SpringCloud Alibaba Seata分散式SpringGCCloud
- ORACLE懸疑分散式事務問題處理Oracle分散式
- SQL Server分散式事務處理(MS DTC)-續SQLServer分散式
- 分散式系列七: 分散式事務理論分散式
- SpringCloud+RocketMQ實現分散式事務SpringGCCloudMQ分散式
- 請教分散式事務的具體處理:急!!!!分散式
- SpringCloud Alibaba(六) - Seata 分散式事務鎖SpringGCCloud分散式
- Java TX-LCN:(四)TX-LCN 事務模式Java模式
- 微服務分散式事務之LCN、TCC特點、事務補償機制緣由以及設計重點微服務分散式
- 分散式事務(2)---TCC理論分散式
- 分散式事務(一)—分散式事務的概念分散式
- TCC和兩階段分散式事務處理的區別分散式
- 一次ORACLE分散式事務鎖異常處理分析Oracle分散式
- 分散式事務處理兩階段提交機制和原理分散式
- 老生常談——利用訊息佇列處理分散式事務佇列分散式
- 使用強大的DBPack處理分散式事務(PHP使用教程)分散式PHP
- .NET開源的處理分散式事務的解決方案分散式
- 有關分散式資料庫事務處理的問題分散式資料庫
- 分散式事務理論加實戰分散式
- (1)分散式事務理論基礎分散式
- SpringCloud系列之整合分散式事務Seata應用篇SpringGCCloud分散式
- 分散式事務對於兩階段提交的錯誤處理分散式
- dx幫忙::跨異構平臺的分散式事務處理.分散式
- 分散式事務(3)---RocketMQ實現分散式事務原理分散式MQ
- 分散式事務和分散式hash分散式
- 分散式事務及其CAP和base理論分散式