- 深度剖析ApacheDubbo核心技術內幕
- 翟陸續
- 771字
- 2020-03-02 16:12:25
第5章 Dubbo消費端服務mock與服務降級策略原理
5.1 服務降級原理
5.1.1 降級策略注冊
在基礎篇中,我們介紹了使用下面的代碼可以將服務降級信息注冊到ZooKeeper:

當以參數force調用上述代碼時,降級策略就會寫入ZooKeeper服務器com.books.dubbo.demo.api.GreetingService子樹中Type為configurators的下面,如圖5.1所示。當然,也可以使用admin手動配置服務降級策略。

圖5.1
當服務消費者啟動時,會去訂閱com.books.dubbo.demo.api.GreetingService子樹中的信息,比如Providers(服務提供者列表)、Routes(路由信息)、Configurators(服務降級策略)等信息,這些內容在第4章已經講過。
當服務消費者發起遠程調用時,會看是否設置了force:return降級策略,如果設置了則不發起遠程調用并直接返回mock值,否則發起遠程調用。當遠程調用結果OK時,直接返回遠程調用返回的結果;如果遠程調用失敗了,則看當前是否設置了fail:return的降級策略,如果設置了,則直接返回mock值,否則返回調用遠程服務失敗的具體原因。
5.1.2 服務消費端使用降級策略
首先,我們看一幅簡化的時序圖,了解一下從消費端發起遠程調用的流程,如圖5.2所示。

圖5.2
從圖中可以看出,服務消費端是在MockClusterInvoker類的invoke()方法里使用降級策略并在DubboInvoker的invoke()方法里發起遠程調用的,所以服務降級是在消費端還沒有發起遠程調用時完成的。
本節主要講解服務降級,所以我們看看MockClusterInvoker類的代碼:

通過上面的代碼可知,其中directory.getUrl()方法獲取的就是上一節我們講解overrideDirectoryUrl,代碼1查看該URL里面是否含有mock的值,如果沒有或者有但是值為false,說明沒有設置降級策略,則執行代碼2.1,也就是正常發起遠程調用。
如果URL里面含有mock字段,并且其值以force開頭,則說明設置了force:return降級策略,那么直接調用doMockInvoke()方法(其內部會調用創建的MockInvoker的invoke()方法),返回mock值,而不發起遠程調用。
如果URL里面含有mock字段,并且其值以fail開頭,則說明設置了fail:return降級策略,那么先發起遠程調用。如果遠程調用成功,則直接返回遠程返回的結果(如果這里使用了默認的集群容錯策略,則代碼4.1會調用FailoverClusterInvokerd的invoke()方法發起遠程調用);如果發起遠程調用失敗,則執行代碼4.3,直接返回mock的值。
- Getting Started with Citrix XenApp? 7.6
- Computer Vision for the Web
- WSO2 Developer’s Guide
- 數據結構與算法JavaScript描述
- Unity Shader入門精要
- Highcharts Cookbook
- 零基礎Java學習筆記
- Quantum Computing and Blockchain in Business
- Python從入門到精通
- Maker基地嘉年華:玩轉樂動魔盒學Scratch
- Learning Ionic
- Python大規模機器學習
- Visual C++開發寶典
- HTML5移動前端開發基礎與實戰(微課版)
- 金融商業數據分析:基于Python和SAS