導航:首頁 > 源碼編譯 > 注冊nacos源碼

注冊nacos源碼

發布時間:2024-06-25 02:21:30

① springboot 2.4.13 無法從nacos獲取配置,但是可以注冊到nacos

springboot 2.4.13,集成了nacos,啟動後,nacos注冊中心有服務,但是,發現,配置沒有生效。於是,開啟了一段源碼查找的過程。

首先,是pom引入的nacos配置

然後,application.yml添加nacos配置

啟動後,發現注冊中心有服務,但是,服務的配置不是從nacos配置中心獲取的,而是本地的。

查找一下nacos源碼,找到nacos配置自動注入那塊兒:

然後發現,是這個NacosPropertySourceLocator實現的配置導入的

查詢源碼,可以發現,相關的配置,是通過這個方法,載入的,這個方法是總入口。

於是,嘗試加斷點,查看配置信息,看看為什麼沒有導入配置。然而,程序根本就沒有進入這個方法裡面!!!

根據介面實現,可以發現NacosPropertySourceLocator 是PropertySourceLocator的實現類,這個方法的調用執行,不是nacos自己去做的,而是通過spring去做的。

spring cloud 通過BootstrapApplicationListener,以監聽器的方式,通過監聽springboot啟動過程中的事件,通過onApplicationEvent方法處理事件,導入spring cloud相關配置。

通過加斷點,可以發現,這里的方法bootstrapEnabled()返回值是false,直接就不執行後續的載入了。

因此,需要保證bootstrapEnabled返回值是true。

查看PropertyUtils源碼,可以發現,需要配置項 spring.cloud.bootstrap.enabled=true 並且存在 org.springframework.cloud.bootstrap.marker.Marker 類的時候,spring cloud 才會去載入spring cloud的配置。

因此,pom中需要添加marker所在的組件依賴:

此時,需要在 bootstrap.yml 中添加spring cloud配置:

(至於為什麼是bootstrap.yml而不是application.yml,這又是另一個問題了)

有了上面的配置,程序啟動後,就能正常的從nacos配置中心獲取配置了。

② Spring Cloud Gateway鏁村悎Nacos瀹炵幇鏈嶅姟璺鐢卞強闆嗙兢璐熻澆鍧囪 

鎴戜滑閮界煡閬 Spring Cloud Gateway 鏄涓涓鍩轟簬 Spring Boot Spring WebFlux Project Reactor 鏋勫緩鐨勯珮鎬ц兘緗戝叧錛屾棬鍦ㄦ彁渚涚畝鍗曘侀珮鏁堢殑API璺鐢便

Spring Cloud Gateway鍩轟簬 Netty 榪愯岋紝鍥犳ゅ湪浼犵粺Servlet瀹瑰櫒涓鎴栬呮墦鎴恮ar鍖呮槸涓嶈兘姝e父榪愯岀殑銆

榪欓噷鎴戜滑娉ㄥ唽涓蹇冮夊瀷鐨勬槸 Nacos 錛屽傛灉榪樻病鏈夊畨瑁匩acos錛岃峰弬鑰冿細 Nacos蹇閫熷畨瑁呴儴緗 銆

濡傛灉URI浠==lb==寮澶達紝姣斿傚備笂閰嶇疆涓鐨 lb://user-service 錛 Spring Cloud Gateway 浼氱敤 瑙f瀽鏈嶅姟鍚嶄負 user-service 鐨勫疄渚嬪瑰簲鐨勫疄闄卙ost鍜岀鍙o紝騫跺仛闆嗙兢璐熻澆鍧囪銆

榪欓」鍔熻兘閫氳繃鍏ㄥ矓榪囨護鍣 瀹炵幇錛屽畼緗戞弿榪板備笅錛
[鍥劇墖涓婁紶澶辮觸...(image-b13395-1655546589820)]

RouteRecordGlobalFilter 榪欎釜鍏ㄥ矓榪囨護鍣ㄦ垜浠涓昏佺敤鏉ヨ板綍璺鐢卞悗鐨勫疄闄呬唬鐞嗗湴鍧錛屼互鍙婅皟鐢ㄨ楁椂銆

鎴戜滑鐪嬩笅 RouteToRequestUrlFilter 鐨勬弿榪頒細鍙戠幇瀹為檯璺鐢卞湴鍧浼氶氳繃 ServerWebExchange 涓鍚嶄負 ServerWebExchangeUtils.GATEWAY_REQUEST_URL_ATTR 鐨勫睘鎬т繚瀛樸

[鍥劇墖涓婁紶澶辮觸...(image-a33940-1655546589820)]

鍏充簬 RouteToRequestUrlFilter 鐨勯儴鍒嗘簮鐮佸備笅錛

鍒嗗埆鍚鍔╝pi-gateway銆佹寚瀹氭傝佹枃浠跺惎鍔ㄤ袱涓猽ser-service鏈嶅姟瀹炰緥銆佸拰涓や釜message-service鏈嶅姟瀹炰緥錛屾煡鐪婲acos鎺у埗鍙般
[鍥劇墖涓婁紶澶辮觸...(image-34bdc6-1655546589820)]

鍙浠ョ湅鍒幫紝api-gateway鍚鍔ㄤ簡涓涓鏈嶅姟瀹炰緥錛寀ser-service鍜宮essage-service閮藉惎鍔ㄤ簡涓や釜鏈嶅姟瀹炰緥銆

榪炵畫璁塊棶 http://localhost:9000/user/info 錛屽彲浠ョ湅鍒皍ser-service闆嗙兢鏈嶅姟瀹炰緥琚杞璇㈣皟鐢ㄣ

鍒嗗埆璁塊棶 http://localhost:9000/user/info 銆 http://localhost:9000/message/info 錛屾垜浠鍙浠ョ湅鍒板熀浜庤礬寰勫尮閰嶇殑鏈嶅姟璺鐢卞垎鍙戞槸鎴愬姛鐨勩

③ 微服務架構 | *3.5 Nacos 服務注冊與發現的源碼分析

參考資料
《Spring Microservices in Action》
《Spring Cloud Alibaba 微服務原理與實戰》
《B站 尚矽谷 SpringCloud 框架開發教程 周陽》

為方便理解與表達,這里把 Nacos 控制台和 Nacos 注冊中心稱為 Nacos 伺服器(就是 web 界面那個),我們編寫的業務服務稱為 Nacso 客戶端;

Nacos 客戶端將自己注冊進 Nacos 伺服器。《1. 服務如何注冊進 Nacos 注冊中心》主要從 Nacos 客戶端角度解釋如何發送信息給 Nacos 伺服器;《2. Nacos 伺服器注冊服務》主要從 Nacos 伺服器角度解釋注冊原理;

《3. 客戶端查詢所有服務實例》將從服務消費者和提供者的角度,解釋服務消費者如何獲取提供者的所有實例。服務消費者和提供者都是 Nacos 的客戶端;

《4. 客戶端監聽 Nacos 伺服器以動態獲取服務實例》從消費者客戶端角度出發監聽 Nacos 伺服器,以動態獲知提供者的變化;







④ nacos原理

nacos目前是集成到spring cloud alibaba里去的,也就是在spring cloud的標准之下實現了一些東西,spring cloud自己是有一個介面,叫做ServiceRegistry,也就是服務注冊中心的概念,nacos中有一個它的實現類NacosServiceRegistry,實現了register、deregister、close、setStatus、getStatus之類的方法。

自動裝配是一個spring boot的一個概念,自動裝配的意思,其實就是說系統啟動的時候,自動裝配機制會運行,實現一些系統的初始化,自動運行,也就是系統啟動時自動去調用NacosServiceRegistry的register方法去進行服務注冊。而且除了注冊之外,還會通過schele線程池去提交一個定時調度任務,源碼如下:

this.exeutorService.schele(new BeatReactor.BeatTask(beatInfo), beatInfo.getPeriod(), TimeUnit.MILLISECONDS),這就是一個心跳機制,定時發送心跳給nacos server。

然後會訪問nacos server的open api,其實就是http介面,他有一個介面:http://31.208.59.24:8848/nacos/v1/ns/instance?serviceName=xx&ip=xx&port=xx,這么一個東西,也沒什麼特別的,這里就是訪問注冊介面罷了

nacos server那裡是基於一個ConcurrentHashMap作為注冊表來放服務信息的,直接會構造一個Service放到map里,然後對Service去addInstance添加一個實例,本質裡面就是在維護信息,同時還會建立定時檢查實例心跳的機制。最後還會基於一致性協議,比如說raft協議,去把注冊同步給其他節點。

服務發現的本質其實也是nacos server上的一個http介面,就是:http://31.208.59.24:8848/nacos/v1/ns/instance/list?serviceName=xx,就這么一個介面,然後就會啟動定時任務,每隔10s拉取一次最新的實例列表,然後服務端還會監聽他服務的狀態,有異常就會基於UDP協議反向通知客戶端這次服務異常變動。

⑤ 微服務架構 | *2.5 Nacos 長輪詢定時機制的源碼分析

參考資料
《Spring Microservices in Action》
《Spring Cloud Alibaba 微服務原理與實戰》
《B站 尚矽谷 SpringCloud 框架開發教程 周陽》

為方便理解與表達,這里把 Nacos 控制台和 Nacos 注冊中心稱為 Nacos 伺服器(就是 web 界面那個),我們編寫的業務服務稱為 Nacso 客戶端;

由於篇幅有限,這里將源碼分析分為上下兩篇,其中上篇講獲取配置與事件訂閱機制,下篇講長輪詢定時機制;在 《微服務架構 | 2.2 Alibaba Nacos 的統一配置管理》 中提到一張 Nacos 動態監聽的長輪詢機制原理圖,本篇將圍繞這張圖剖析長輪詢定時機制的原理;

上篇 《微服務架構 | *2.4 Nacos 配置中心的源碼分析(獲取配置與事件訂閱機制)》 中的 1.1 提到,ConfigService 是 Nacos 客戶端提供的用於訪問實現配置中心基本操作的類,我們將從 ConfigService 的實例化開始長輪詢定時機制的源碼之旅;




⑥ springcloud nacos1.4.1 本地運行源碼報錯,缺少entity包下的類

下載的應該不會缺少依賴,

  1. 可以重新載入一下maven項目。

  2. 查看maven配置是否正確。

  3. 查看依賴是否下載。

  4. 手動下載依賴,並載入

閱讀全文

與注冊nacos源碼相關的資料

熱點內容
新建文件夾叫什麼名字 瀏覽:565
windows20的開機命令 瀏覽:329
微信一般在電腦的那個文件夾 瀏覽:507
go在win7下編譯特別慢 瀏覽:245
光遇ios耳機安卓為什麼沒有 瀏覽:902
小米手機桌面文件夾經常自動散開 瀏覽:604
小米電話手錶用什麼app進行設置 瀏覽:263
虛擬列印機pdf下載 瀏覽:669
jdk編譯運行方法 瀏覽:457
android執行shell命令 瀏覽:347
程序員頭像女 瀏覽:55
有什麼可以變頭發顏色的app 瀏覽:933
玩具解壓屋游戲下載 瀏覽:847
我的世界拔刀劍伺服器地址id 瀏覽:889
程序員年輕人的危機 瀏覽:217
明朝那些事pdf 瀏覽:731
mysql命令查看錶 瀏覽:535
阿里雲伺服器登錄密碼忘了怎麼辦 瀏覽:499
linuxwwwdata 瀏覽:996
用蘋果終端java編譯 瀏覽:368