服務呼叫大致分為兩個部分,乙個是客戶端的服務呼叫,乙個是服務端的接受請求並相應,下面就這兩個部分分析。
這裡是從服務呼叫直接分析,在這之前的服務引入已經完成了,已經獲得了聚合了所有服務提供者的invoekr物件,這個invoker物件會有幾個包裝類,下面會以此執行它們的invoke方法。相當於一條invoker鏈。
因為在服務呼叫的時候會得到乙個invoker**物件,所以服務呼叫的入口自然是在**物件中,這個**物件叫做invokerinvocationhandler。
接著會執行另外乙個invoker物件invoke
方法,mockclusterinvoker,在這個物件主要是完成服務降級的操作,具體會在下面分析mockclusterinvoker的作用。
最後會進入到abstractinvoker的invoke
方法中,執行doinvoke
方法
在dubboinvoker的doinvoke
方法中就會通過httpclient先服務端傳送請求,至此客戶端的服務呼叫也就基本執行完了,只需要服務端響應請求返回結果了。
至此的呼叫鏈如下
客戶端的大致流程如下:
mockclusterinvoker進行方法降級
路由過濾
負載均衡
容錯重試
filter鏈
httpclient傳送請求
服務提供端已經完成了服務匯出,也啟動tomcat完成了埠暴露的工作,接下來就是接收消費者的請求。
首先是通過servlet接收請求,這裡是通過service
方法攔截的,在方法裡面是通過handle
方法處理的請求
這裡傳送的是http請求,執行的自然是httpprotocol中的內部類internalhandler中handle方法。
echofilter
classloaderfilter
genericfilter
contextfilter
tracefilter
timeoutfilter
monitorfilter
exceptionfilter
可以在消費端定義降級方法,在xml中設定mock屬性
}在呼叫失敗時會執行mock的邏輯,相當於服務降級
在經過路由過濾後會初始化負載均衡策略
預設是隨機策略
在集群提供服務的話,會實現負載均衡,在呼叫select方法中會實現負載均衡的策略,真正的邏輯在doselect方法中,而且會和集群容錯相結合使用,可以參考下面的集群容錯和上面的消費端服務呼叫分析。
abstractinvoker的邏輯執行完後,會執行下乙個invoker,就是abstractclusterinvoker的子類,可以設定容錯模式呼叫對應的物件,預設是failoverclusterinvoker,在這個doinvoke方法中,會實現容錯機制,在呼叫失敗後會進行重試,並且會嘗試其他服務提供者。
這裡會將嘗試過的invoker加到乙個集合中
在選擇invoker的時候會將這個集合傳進去,select方法中負載均衡策略會判斷選出來的invoker是否被呼叫過,如果呼叫過會重新負載均衡選擇。
dubbo呼叫超時回滾 Dubbo服務呼叫超時
服務降級的發生,其實是由於消費者呼叫服務超時引起的,即從發出呼叫請求到獲取到提供者的響應結果這個時間超出了設定的時限。預設服務呼叫超時時限為1秒。可以在消費者端與提供者端設定超時時限。一 建立提供者工程06 provider timeout 1 建立工程 複製02 provider zk工程,並重命...
Dubbo 服務呼叫流程
工作流涉及到服務提供者 provider 註冊中心 registration 網路 network 和服務消費者 consumer 服務提供者在啟動的時候,會通過讀取一些配置將服務例項化。proxy 封裝服務呼叫介面,方便呼叫者呼叫。客戶端獲取 proxy 時,可以像呼叫本地服務一樣,呼叫遠端服務。...
dubbo泛化呼叫使用及問題總結
dubbo泛化呼叫就是服務消費端不需要引入介面jar包,通過genericservice介面就能處理完成所有服務的呼叫,引數及返回值中的所有pojo均用map表示。public class dubboservicefactory public static dubboservicefactory g...