W3Cschool
恭喜您成為首批注冊用戶
獲得88經驗值獎勵
在 Dubbo 中利用本地存根在客戶端執(zhí)行部分邏輯
遠程服務后,客戶端通常只剩下接口,而實現(xiàn)全在服務器端,但提供方有些時候想在客戶端也執(zhí)行部分邏輯,比如:做 ThreadLocal 緩存,提前驗證參數(shù),調用失敗后偽造容錯數(shù)據(jù)等等,此時就需要在 API 中帶上 Stub,客戶端生成 Proxy 實例,會把 Proxy 通過構造函數(shù)傳給 Stub (Stub 必須有可傳入 Proxy 的構造函數(shù)),然后把 Stub 暴露給用戶,Stub 可以決定要不要去調 Proxy。
在 spring 配置文件中按以下方式配置:
<dubbo:consumer interface="com.foo.BarService" stub="true" />
或
<dubbo:consumer interface="com.foo.BarService" stub="com.foo.BarServiceStub" />
提供 Stub 的實現(xiàn) (在 interface 旁邊放一個 Stub 實現(xiàn),它實現(xiàn) BarService 接口,并有一個傳入遠程 BarService 實例的構造函數(shù)):
package com.foo;
public class BarServiceStub implements BarService {
private final BarService barService;
// 構造函數(shù)傳入真正的遠程代理對象
public BarServiceStub(BarService barService){
this.barService = barService;
}
public String sayHello(String name) {
// 此代碼在客戶端執(zhí)行, 你可以在客戶端做ThreadLocal本地緩存,或預先驗證參數(shù)是否合法,等等
try {
return barService.sayHello(name);
} catch (Exception e) {
// 你可以容錯,可以做任何AOP攔截事項
return "容錯數(shù)據(jù)";
}
}
}
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網(wǎng)安備35020302033924號
違法和不良信息舉報電話:173-0602-2364|舉報郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: