1. 程式人生 > 實用技巧 >Nacos客戶端原始碼分析

Nacos客戶端原始碼分析

前面已經用兩篇文章介紹瞭如何安裝Nacos控制檯和Dubbo服務如何釋出註冊並在Nacos控制檯上呈現。今天不再講這些配置的東西,來點乾貨,分析Nacos的客戶端原始碼。微服務中心的專案工程如果要註冊服務,就需要依賴Nacos的客戶端,這在前面已經講了如何進行pom依賴實現。開啟nacos-client的jar包看看裡面是什麼:

有的同學經常說不知道從哪裡開始看原始碼,今天就教大家從哪裡下手。這個工程下總共5個一級目錄:config,identify,logger,naming,utils。大家從這幾個目錄是不是都基本可以猜到是做什麼用的。

config:配置

identify:身份驗證

logger:日誌

naming:?

utils:工具類

經過上面的分析就只有一個我們不知道是什麼,既然別的都知道了是什麼,而且和主業務無關,那打問號的這個肯定就是Nacos的獨門武器。展開後看到core,beat,net更加堅定了我們的猜測。繼續往下猜,哪個類是發起服務註冊的呢?最外面的一個孤零零的類像不像,NacosNamingService確實很像,點進去看看裡面有什麼方法嘛。果真就看到registerInstance的方法,打個斷點,debug起下微服務專案看斷點進不進來。

registerInstance有幾個過載的方法依次呼叫,這裡建立了一個例項(instance),一個心跳物件(BeatInfo)。這些我們都不用管,盯住主流程不放,最後通過一個伺服器代理物件呼叫註冊服務的方法(registerService),就是我斷點的位置。

接著就進入到NamingProxy類的下圖的方法:

這是什麼,發揮你的想象力,是不是我們平時寫controller的時候的restful的path路徑。如果不相信這是真的,就去Nacos的官網看看API。

原來就是向服務端發了一個post請求,這個Client你自己就可以寫出來吧,我們還需要繼續研究原始碼,看看是通過什麼東西把這個post請求發出去的。斷點繼續往下走:

暈,原來就是用HttpClient調的,組裝了一個url地址的請求,裡面包含IP、埠和官網提供的api的路徑。當然這裡的HttpClient不是jdk或者apache的,是阿里自己寫的一個類,放在文章開始的專案路徑的net包下,大家有興趣可以自己研讀下。

下面我畫個呼叫鏈的圖更好的說明Nacos客戶端是怎麼把服務註冊到服務端的。

今天主要是從原始碼層面分析了Nacos客戶端是如何運作的,主要的思想就是服務端定義了一個http的介面,客戶端向服務端發起該介面的post請求,用到的技術就是HttpClient。文後附上我之前寫的兩篇關於Nacos的文章,希望大家先看看那兩篇文章,對於第一次想了解Nacos的同學有幫助。

附錄:

Nacos服務端安裝和啟動

Dubbo+Nacos實現服務註冊和發現