官术网_书友最值得收藏!

第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的值。

主站蜘蛛池模板: 松原市| 丰台区| 句容市| 凤台县| 大悟县| 沽源县| 钦州市| 东阿县| 怀集县| 申扎县| 巩留县| 昭苏县| 武功县| 苗栗市| 九台市| 永丰县| 阳西县| 绍兴县| 常德市| 惠水县| 琼海市| 松滋市| 吴江市| 弥渡县| 金乡县| 嘉定区| 奉化市| 恭城| 临湘市| 布尔津县| 三台县| 东至县| 嘉义市| 江陵县| 柳林县| 延安市| 抚宁县| 尉氏县| 榆林市| 拜泉县| 仁怀市|