一、什么是分布式事務?
二、lcn的實現思路
Lcn 的本質就是提供了一個全局的事務管理器
本地事務的提交還是回滾,由全局的事務管理器決定
2.1 本地執行的狀態怎么提交給全局事務?
使用切面攔截本地事務的執行結果,使用tcp 發送給tx-manager
2.2 本地事務的提交或回滾怎么實現?
等待tx-manager通知自己
三、lcn的使用
3.1 下載lcn-manager (全局的事務管理器)
3.2 配置lcn-manager
配置eureka 并且配置redis
Redis:
3.3 啟動lcn
3.4 模擬轉賬服務
數據庫:
3.4.1 add-service
3.4.2 decr-service
3.5 2 個微服務都需要添加依賴
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency> <dependency> <groupId>com.codingapi</groupId> <artifactId>transaction-springcloud</artifactId> <version>${lcn.last.version}</version> <exclusions> <exclusion> <groupId>org.slf4j</groupId> <artifactId>*</artifactId> </exclusion> </exclusions> </dependency> <dependency> <groupId>com.codingapi</groupId> <artifactId>tx-plugins-db</artifactId> <version>${lcn.last.version}</version> <exclusions> <exclusion> <groupId>org.slf4j</groupId> <artifactId>*</artifactId> </exclusion> </exclusions> </dependency> <!-- 依據druid 來實現的攔截功能 --> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version>1.0.19</version> </dependency>
3.6 需要自定義數據庫的連接池
在2 個微服務的啟動類或配置類里面都可以添加
@Bean public DataSource dataSource() { DruidDataSource dataSource = new DruidDataSource(); dataSource.setUrl(env.getProperty("spring.datasource.url")); dataSource.setUsername(env.getProperty("spring.datasource.username"));//用戶名 dataSource.setPassword(env.getProperty("spring.datasource.password"));//密碼 dataSource.setInitialSize(10); dataSource.setMaxActive(50); dataSource.setMinIdle(0); dataSource.setMaxWait(60000); dataSource.setValidationQuery("SELECT 1"); dataSource.setTestOnBorrow(false); dataSource.setTestWhileIdle(true); dataSource.setPoolPreparedStatements(false); return dataSource; }
3.7 使用
3.7.1 事務的發起者
轉賬:
事務的參與者
減少錢:
加錢:
3.7.2 添加配置文件
3.8 啟動2 個微服務
3.9 測試轉賬服務
到此這篇關于LCN分布式事務解決方案詳解的文章就介紹到這了,更多相關LCN分布式事務解決內容請搜索服務器之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持服務器之家!
原文鏈接:https://blog.csdn.net/qq_41532872/article/details/94591415