分布式事務框架選型


個人發展建議:研究源碼,知核心,知原理,清楚了解細節,甚至改造,自己寫!!

各組件框架選型建議:看好官方文檔各種功能的生產建議和網上專業生產建議,盡量不要使用版本太新的,或剛開源的別人也知之甚少、踩坑少的框架,和官方都不建議生產環境使用的各種功能,沒有生產安全保障!!

關於Eureka等注冊中心的選型:選CA會導致選舉過程中整個中心掛掉,無法訪問!--而這絕不該在生產環境出現。看好文檔和博文的意思。Eureka的優點就在於AP,可以保證高可用,犧牲CA的嚴格一致性(CA是以犧牲可用性為代價嗎?)。

 

LCN5.0.0.RC1(直接支持spring boot 2.0)踩坑記錄

1.要想加入分布式事務,需要啟動tx-manager服務,這里采用的是直接將源碼工程clone下來,maven編譯,控制台啟動,服務端口8069,注冊分布式事務的客戶端訪問端口為8070

修改tx-manager服務的工程配置文件application.properties:

從服務的配置文件中看,需要手動創建tx-manager庫,並在該庫創建官網http://www.txlcn.org/zh-cn/docs/demo/env.html要求的庫下的表

創建帶'-'的庫異常問題解決:加上反引號,參考https://www.aliyun.com/jiaocheng/1107307.html

2.tx-manager的客戶端訪問注冊事務端口,是通過啟動Netty原生服務端,客戶端使用Netty原生客戶端,加上心跳Handler維持長連接實現的,

事務注冊客戶端和tx-manager均依賴tx-lcn依賴下的子依賴包tx-spi-message-netty,而且客戶端是通過這個依賴包到tx-manager進行分布式服務注冊的

客戶端client工程配置了一個

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

參數,另外兩個被調用的工程並沒有,但打印的啟動日志中發現也注冊到了tx-manager,具體原理和默認注冊端口待查(或為自動配置),相關Netty服務依賴的類都在這個包中,具體看類:

com.codingapi.txlcn.spi.message.netty.impl.NettyRpcServerInitializer和com.codingapi.txlcn.spi.message.netty.impl.NettyRpcClientInitializer

配置一系列handler的InitHandler類參照:

com.codingapi.txlcn.spi.message.netty.handler.NettyRpcServerHandlerInitHandler和com.codingapi.txlcn.spi.message.netty.handler.NettyRpcClientHandlerInitHandler

這兩個InitHandler類里配置了編解碼、粘包拆包、心跳維持等相關,具體看其配置的handler類

這樣客戶端可順利連接服務端並維持這個長連接,用於支持分布式事務各節點和tx-manager的即時通信

3.要想順利使用maven編譯打包,需要去掉tx-lcn根工程里的maven-gpg-plugin插件依賴,否則maven編譯報錯!!

4.若要修改tx-lcn分布式事務框架源碼,可以直接在clone下來的源碼中改,maven編譯打包的本地maven倉庫,生成的依賴包和直接dependency引用jar包的gav三坐標是

一樣的,這時在演示工程中引用tx-lcn依賴時,只要引用同一個本地maven庫的tx-lcn依賴,就可順利將原來從阿里雲下載的tx-lcn依賴替換為你修改過源碼安裝到本地庫的

tx-lcn依賴,因為它們的gav是一樣的,且在同一個倉庫,修改過源碼的tx-lcn依賴會覆蓋掉原來從阿里雲下載的tx-lcn依賴

5.演示工程txlcn-demo的各個子工程,需要注冊到Consul服務端,如果簡單去掉其子工程的Consul依賴和服務發現注解,服務啟動會報錯!!導致啟動失敗,

注意這個啟動失敗會造成服務無法訪問!!可能是因為Spring容器創建Bean失敗造成容器初始化失敗,所以需要啟動一個本地的Consul服務端,默認注冊端口8500,Web管理端口也是這個

6.按照演示工程配置文件創建數據庫和表,注意連接參數spring.datasource.hikari.maximum-pool-size都要設置的小一些,否則提示數據庫連接過多,還有這里的數據庫連接使用了ssl造成啟動時連接警告

這些應該都可以通過調整mysql服務端配置進行修改,待查

7.注冊到Consul的演示子工程,服務名有問題,造成通過Feign聲明式客戶端直接通過服務名調用時失敗,這里的問題待查,暫時將Feign聲明式訪問改為不通過注冊中心的url方式

@FeignClient(name = "spring-demo-d",url = "127.0.0.1:12002")

參照:https://www.jianshu.com/p/996347925e48

這樣就能正常地通過RPC(Rest方式)訪問服務了,否則調用會報錯,造成分布式事務演示失敗,這並不是分布式事務的問題!!

因服務名錯誤而調用異常的報錯原理參照:https://blog.csdn.net/qq_38958113/article/details/82885160

有時間要仔細分析Spring Cloud各個組件原理,關鍵類,流程架構,源碼!!

 

Consul相關:

官網:https://learn.hashicorp.com/consul/

Consul與Eureka等對比和啟動參考:

Win版啟動和例子:http://blog.51cto.com/ityouknow/2147587

Linux集群和管理客戶端版:https://www.cnblogs.com/yjmyzz/p/replace-eureka-with-consul.html

轉自didispace的:https://blog.csdn.net/ZYC88888/article/details/81453647

Spring Cloud整合Consul:

Feign客戶端及負載均衡調用(含GitHub代碼示例):https://www.cnblogs.com/soinve/p/9673738.html

服務調用示例:https://blog.csdn.net/qq_26641781/article/details/82080659

服務發現與配置管理(含GitHub源碼示例):https://blog.csdn.net/bawcwchen/article/details/80645540

 

 

LCN舊版本修改支持spring boot 2.0的方案:https://www.cnblogs.com/sxdcgaq8080/p/9776695.html

https://www.jianshu.com/p/453741e0f28f

https://blog.csdn.net/zhuwei_clark/article/details/82837429

官方網站:http://www.txlcn.org/zh-cn/

GitHub地址:https://github.com/codingapi/tx-lcn/

GitHub Wiki:https://github.com/codingapi/tx-lcn/wiki/LCN%E5%8E%9F%E7%90%86

 

 

阿里Fescar(GTS開源版本,GTS有阿里雲服務)官方中文:https://github.com/alibaba/fescar/wiki/Home_Chinese

開源消息和與其他分布式框架(ByteTCC、LCN)對比:https://blog.csdn.net/xlgen157387/article/details/86289066

介紹和對比:https://blog.csdn.net/weixin_39800144/article/details/86498296


免責聲明!

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



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