個人發展建議:研究源碼,知核心,知原理,清楚了解細節,甚至改造,自己寫!!
各組件框架選型建議:看好官方文檔各種功能的生產建議和網上專業生產建議,盡量不要使用版本太新的,或剛開源的別人也知之甚少、踩坑少的框架,和官方都不建議生產環境使用的各種功能,沒有生產安全保障!!
關於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