Dubbo源碼分析(二)Invocation

本文將主要圍繞Invocation這個抽象概念進行講解,首先來看一下相關的類圖結構。

Dubbo Invocation

整體概念

  1. Invocation,一次具體的調用,包含方法名、參數類型、參數
  2. Result,一次調用結果,包含value和exception
  3. Invoker,調用者,對應一個服務接口,通過invoke方法執行調用,參數爲Invocation,返回值爲Result

DubboInvoker

  • 通過ExchangeClient發送調用請求(Invocation)
  • doInvoke()分爲oneWay、async、sync調用
  • 對client的選擇採用輪詢的方式

ThriftInvoker

與sync調用基本相同

AbstractClusterInvoker

  • 多個服務端實例組成的集羣,可以設定針對多組實例的選擇策略
  • 維護Directory對象,通過list方法查找一個Invocation對應的Invokers
  • 具有select方法,invokers作爲參數傳遞給select()

選擇策略:通過LoadBalance來選取Invoker,若選出的Invoker已經被選擇過,則進行reselct()

7種集羣調用策略

FailfastClusterInvoker

select之後只調用一次,失敗立即返回錯誤

FailoverClusterInvoker

重試n次,每次更新selected集合,保證失敗後切換到另一個Invoker

FailbackClusterInvoker

select後發起一次調用,若失敗則將Invoker加入失敗列表,定期重試

FailsafeClusterInvoker

select後發起一次調用,若失敗忽略異常,返回一個空Result

AvailableClusterInvoker

不進行select,僅選取第一個available的Invoker

BroadcastClusterInvoker

不進行select,每個Invoker都調用一次

ForkingClusterInvoker

不進行select,對所有分組並行發起調用,最快的調用完成後返回結果

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章