1. 程式人生 > >dubbo原始碼解析——概要篇

dubbo原始碼解析——概要篇

這次原始碼解析借鑑《肥朝》前輩的dubbo原始碼解析,進行原始碼學習。總結起來就是先總體,後區域性.也就是先把需要注意的概念先丟擲來,把整體架構圖先畫出來.讓讀者拿著"地圖"跟著我的腳步,並且每一步我都提醒,現在我們在哪,我們下一步要做什麼,這樣才不會迷失方向。

前期

在這裡插入圖片描述 這張是官網的對於叢集容錯的架構設計圖,即使你有一定的使用經驗,第一眼看到這個圖可能還是有些懵逼.因為這個圖是從設計的角度畫出來的,而不是使用的角度.但是即使這個圖你看不懂也不影響你對本文的閱讀,但是你必須要記住一些關鍵詞,因為這些關鍵詞接下來會貫穿全文

Invoker

概念: 它是一個可執行的物件,能夠根據方法的名稱、引數得到相應的執行結果。 它裡面有一個很重要的方法 Result invoke(Invocation invocation), Invocation是包含了需要執行的方法和引數等重要資訊

它有3種類型的Invoker 1.本地執行類的Invoker server端:要執行 demoService.sayHello,就通過InjvmExporter來進行反射執行demoService.sayHello就可以了。

2.遠端通訊類的Invoker client端:要執行 demoService.sayHello,它封裝了DubboInvoker進行遠端通訊,傳送要執行的介面給server端。 server端:採用了AbstractProxyInvoker執行了DemoServiceImpl.sayHello,然後將執行結果返回傳送給client.

3.多個遠端通訊執行類的Invoker成叢集版的Invoker client端:要執行 demoService.sayHello,就要通過AbstractClusterInvoker來進行負載均衡,DubboInvoker進行遠端通訊,傳送要執行的介面給server端。 server端:採用了AbstractProxyInvoker執行了DemoServiceImpl.sayHello,然後將執行結果返回傳送給client.

Directory

概念 簡單來說,Directory就是裝載invoker的檔案目錄

兩個重要Directory StaticDirectory:靜態目錄服務,他的Invoker是固定的。 RegistryDirectory:註冊目錄服務,他的Invoker集合資料來源於zk註冊中心的,他實現了NotifyListener介面,並且實現回撥notify(List urls), 整個過程有一個重要的map變數,methodInvokerMap(它是資料的來源;同時也是notify的重要操作物件,重點是寫操作。)

Router

概念 利用Router,可以從多個服務提者方中選擇一個進行呼叫

LoadBalance

概念 與Router功能類似,從多個服務提者方中選擇一個進行呼叫

再接下來給大家一張"地圖","地圖"上我已經標記了序號,再下面的原始碼分析中,我也會實時提醒我們所在的位置,以至於不會迷失方向. 在這裡插入圖片描述

後面開始,就是正式的原始碼閱讀(環境搭建這些略過)