Dubbo3 本地存根

2022-04-01 17:05 更新

在 Dubbo 中利用本地存根在客戶端執(zhí)行部分邏輯

遠程服務后,客戶端通常只剩下接口,而實現(xiàn)全在服務器端,但提供方有些時候想在客戶端也執(zhí)行部分邏輯,比如:做 ThreadLocal 緩存,提前驗證參數(shù),調用失敗后偽造容錯數(shù)據(jù)等等,此時就需要在 API 中帶上 Stub,客戶端生成 Proxy 實例,會把 Proxy 通過構造函數(shù)傳給 Stub (Stub 必須有可傳入 Proxy 的構造函數(shù)),然后把 Stub 暴露給用戶,Stub 可以決定要不要去調 Proxy。

/user-guide/images/stub.jpg

在 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ù)";
        }
    }
}


以上內容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號