1. 程式人生 > >dubbo負載均衡原始碼解讀

dubbo負載均衡原始碼解讀

首先連線一下概念

整個Dubbo的RPC框架建立在Protocol、Exporter和Invoker這三個介面上,Protocol擴充套件點定義了一種RPC協議的實現,即如何釋出和引用服務,Exporter代表了一個對外暴露的服務,Invoker執行遠端呼叫並返回結果,實現一個協議要同時實現這三個介面。下面先看一下這三個介面,稍微有點抽象。

1. Protocol

Protocol的原始碼如下,程式碼的註釋已講的比較清楚,這裡可以看到,Dubbo預設使用的協議是dubbo。

 展開原碼

2. Exporter

Exporter代表了一個對外暴露的服務,其原始碼如下,getInvoker返回呼叫服務的Invoker,unexport取消該服務的暴露。

 展開原碼

3. Invoker

Invoker用於執行一個RPC呼叫,其程式碼如下,getInterface返回它是哪個服務的Invoker,invoker方法用於執行遠端呼叫,並返回執行結果。

 展開原碼

Invoker介面擴充套件自Node介面,Node代表了一個具有URL地址的節點,其原始碼如下,getUrl返回該節點的URL地址,isAvailable返回該節點當前是否可用,destory用於銷燬該節點。

 展開原碼

下面看一下Result介面,Result介面代表了RPC呼叫的執行結果,其原始碼如下,getValue返回執行結果的值,如果沒有執行結果則返回null,getException返回執行過程中發生的異常,如果沒有發生異常,則返回null,hasException用於返回是否發生了異常,recreate方法用於重建執行結果,重建的意思就是,模擬執行,然後獲取結果,如果執行正常,則返回值,否則丟擲異常。三個attachment用於獲取執行中的其他附加資訊。

 展開原碼

Invocation表示執行的上下文,其原始碼如下,getMethodName返回呼叫的是哪個方法,getParameterTypes返回所要呼叫的方法的引數類,getArguments返回呼叫方法時使用的引數,三個attachment方法同樣是用於獲取一些附加資訊,getInvoker返回當前上下文是屬於哪個Invoker。

 展開原碼

URL

呼叫關係