ProtocolFilterWrapper是dubbo-rpc模塊中,dubbo-rpc-api的壹個核心類,其中核心方法buildInvokerChain,顧名思義構建invoker鏈。dubbo源碼看到這塊時,理解起來有點費勁兒,特意做記錄,方便日後查看。
1、首先,我們先看壹下方法中的3個核心變量,invoker、filter、next
2、可以清晰看到源碼中,invoker采用了匿名類 ProtocolFilterWrapper$1 實現,我們來看壹下生成的匿名內部類結構
重點關註紅框內的構造方法,以及invoke方法的實現。
OK,下面我們對buildInvokerChain的具體邏輯做分析;我們先對方法邏輯做壹個抽象,首先是原始方法
借助前面我們提到的匿名類,我們做壹下抽象,下面是抽象後的方法:
這樣看起來就簡單多了,實際上這塊邏輯就是把url裏拿到的filter包裝成Invoker,串起來;下面我們了解壹下dubbo是如何把Invoker 串起來的,為了方便理解,這裏做圖解。
假設現在有A、B、C、D、E 5個filter,初始Invoker順序如下:
最後 return last 5,這樣就把所有filter串起來了,最終的Invoker chain順序是 last 5 -> last 4 -> last 3 -> last 2 -> last 1(即 invoker 本身)。