本篇博客通過本地 debug 的方式,詳細介紹 nacos + openFeign 服務注冊&發現工作原理。
篇幅有點長,內容如下:
- 前置准備
1.1. 版本
1.2. 背景:1.4.2 是截止寫這篇博客當天 2021-09-12 最新的 1.x 版本。截圖為證
1.3. 下載源碼
1.4. 導入到 idea
1.5. naocs 服務端日志配置
1.6. nacos 服務端默認日志文件配置 debug 截圖
1.7. nacos 服務端部署時,啟動文件外部指定日志配置文件。以 2.0.2 版本為例,各個版本都一樣
1.8. nacos.xml 輸出級別全部改為 DEBUG
1.9. nacos-server 啟動時,觀察日志可以看到服務注冊相關的控制器
1.10. nacos 客戶端日志配置
- 帶着問題找答案
2.0. nacos 服務注冊流程圖
2.1. nacos-client 是如何注冊到 nacos-server 的?
2.2. nacos-server 端服務注冊怎么實現的?
2.3. nacos-client 如何保持心跳的?
- 客戶端部分
- 服務端部分
2.4. nacos-server 剔除不健康 nacos-client 的機制是什么?
2.5.openFeign client 端調用 server 端時,如何拿到實際 server 端的 ip+port 的?
- 准備
---- 純凈版代碼
---- 導入 idea
---- 從場景的角度切入說明
---- postman 地址
---- postman body
---- 調用鏈說明
---- 流程圖
詳解共 19 步
2.6. openFeign client 端如何實現本地的micro service server 信息 [HostReactor.serviceInfoMap (ip+port) ]與 nacos-server 保持實時同步的?
2.7. 打印日志為證:(日志打印語句見:2,5小節第19步)
- 前置准備
1.1. 版本
nacos: 1.4.2
1.2. 背景:1.4.2 是截止寫這篇博客當天 2021-09-12 最新的 1.x 版本。截圖為證
1.3. 下載源碼
$ git clone https://github.com/alibaba/nacos.git $ cd nacos/ $ git checkout 1.4.2
1.4. 導入到 idea
1.5. naocs 服務端日志配置
META-INF/logback/nacos.xml
1.6. nacos 服務端默認日志文件配置 debug 截圖
1.7. nacos 服務端部署時,啟動文件外部指定日志配置文件。以 2.0.2 版本為例,各個版本都一樣
1.8. nacos.xml 輸出級別全部改為 DEBUG
1.9. nacos-server 啟動時,觀察日志可以看到服務注冊相關的控制器
1.10. nacos 客戶端日志配置
2.0. nacos 服務注冊流程圖
2.1. nacos-client 是如何注冊到 nacos-server 的?
代碼入口:
第一步
第二步
第三步
第四步
客戶端部分完成!
2.2. nacos-server 端服務注冊怎么實現的?
代碼入口
第一步
第二步
第三步
第四步
服務端部分完成!
2.3. nacos-client 如何保持心跳的?
客戶端部分
服務端部分
2.4. nacos-server 剔除不健康 nacos-client 的機制是什么?
Nacos中臨時實例基於心跳上報方式維持活性,基本的健康檢查流程基本如下:Nacos客戶端會維護一個定時任務,每隔5秒發送一次心跳請求,以確保自己處於活躍狀態。
Nacos服務端在15秒內如果沒收到客戶端的心跳請求,會將該實例設置為不健康,在30秒內沒收到心跳,會將這個臨時實例摘除。
2.5.openFeign client 端調用 server 端時,如何拿到實際 server 端的 ip+port 的?
准備
純凈版代碼
導入 idea
純凈版代碼
https://gitee.com/xiluhua/cloudalibaba-feign-server.git https://gitee.com/xiluhua/cloudalibaba-feign-client.git
導入 idea
從場景的角度切入說明
客戶來前端系統(postman)查訂單。
feign-client,后台網關系統接到請求,通過 openFeign 調用 micro service server: feign-server 獲取訂單數據
postman 地址
http://localhost:8080/consumer/payment/get/dfd57039de7841eb9dfd066b4065fe01
postman body
{ "txid": "0c340e229d444200b3d4c19fd027d434", "type": "1", "req": { "name": "張是三", "age": 11 } }
調用鏈說明
流程圖
代碼入口
第一步 , 請看上圖
第二步
第三步
第四步
第五步
第六步
第七步
第八步
第九步
第十步. 手動重新刷新初始化 spring 容器
第11步. 初始化 RibbonLoadBalancer
第12步. DynamicServerListLoadBalancer 動態服務列表負載均衡器,更新服務列表
第13步
第14步. 獲取 micro service server 實例列表
第15步
第16步
第17步
第18步
第19步
完成!
2.6. openFeign client 端如何實現本地的 micro service server 信息 [HostReactor.serviceInfoMap (ip+port) ]與 nacos-server 保持實時同步的?
這部分其實在2.5小節的第16步,已經說明。
2.7. 打印日志為證:(日志打印語句見:2.5小節第19步)
完成!