Dubbo原始碼剖析三之服務註冊過程分析

2022-09-21 19:51:10 字數 1853 閱讀 5402

dubbo原始碼剖析二之註冊中心 - 池塘裡洗澡的鴨子 - (cnblogs.com)中對註冊中心進行了簡單的介紹,對dubbo整合zookeeper鏈結原始碼進行了詳細分析。本文接著對服務註冊過程原始碼進行分析。

借圖說明服務註冊(暴露)流程:

利用之前案例跟蹤除錯分析上述流程的實現,或者驗證該流程:)2)

然後通過proxyfactory 介面實現類中的 getinvoker 方法使用 ref 生成乙個 abstractproxyinvoker 例項,到這一步就完成具體服務到 invoker 的轉化。接下來就是 invoker 轉換到 exporter 的過程。(看下serviconfig類,關注下proxyfactory和protocol型別的屬性以及ref)

註冊原始碼如下:

大致呼叫都找到具體原始碼了,那麼invoker轉換成exporter的過程是怎樣的呢?其中涉及到registryservice、registryfactory介面和註冊provider到註冊中心的具體方法原始碼。

1)registryservice**比較簡單,主要是對指定的路徑進行註冊、解綁、監聽和取消監聽、查詢等操作,是註冊中心最為基礎的類。

2)registryfactory,通過其生成真實的註冊中心。通過這種方式,也可以保證乙個應用中可以使用多個註冊中心。其通過不同的protocol引數選擇不同的協議。

3)那麼乙個服務是如何註冊到註冊中心的呢?其中比較關鍵的乙個類就是registryprotocol,它負責管理整個註冊中心相關協議並且同一對外提供服務。以這個類中的export方法為入口分析需要執行的資訊註冊:

4)register方法,主要從registoryfactory中獲取註冊中心,並且進行位址註冊

都有進行register了,那麼registry中類目錄結構是怎樣的呢?

5)failbackregistry,主要是呼叫第三方實現方式並在出現錯誤時增加重試機制。

補:消費端的註冊流程類似,如下圖示

首先 referenceconfig 類的 init 方法呼叫 createproxy() ,期間 使用 protocol 呼叫 refer 方法生

成 invoker 例項(如上圖中的紅色部分),這是服務消費的關鍵。接下來使用proxyfactory把 invoker

轉換為客戶端需要的介面(如:helloservice)。

深度剖析Dubbo原始碼

學習dubbo原始碼,能給你帶來什麼好處?1.提公升soa的微服務架構設計能力 通過讀dubbo原始碼是一條非常不錯的通往soa架構設計之路,畢竟soa的服務治理就是dubbo首先提出來的,比起你去看市面上的soa微服務架構的書籍,學到的架構原理要更豐富更有深度。2.提公升自己在部門團隊的技術影響力...

Dubbo原始碼閱讀 三 Dubbo 服務註冊

通過註解來註冊dubbo服務的時候,在服務端和消費端都需要用到乙個元件dubbocomponentscanregistrar,先看下registerbeandefinitions 方法 public void registerbeandefinitions annotationmetadata im...

dubbo原始碼 dubbo之Listener

1.exporterlistener spi public inte ce exporterlistener 使用者可以繼承該方法重寫需要的方法 public abstract class exporterlisteneradapter implements exporterlistener pub...