Dubbo的fallback機制

本地假裝

本地假裝 [1] 一般用於服務降級,好比某驗權服務,當服務提供方所有掛掉後,客戶端不拋出異常,而是經過 Mock 數據返回受權失敗。html

在 spring 配置文件中按如下方式配置:spring

<dubbo:reference interface="com.foo.BarService" mock="true" />

apache

<dubbo:reference interface="com.foo.BarService" mock="com.foo.BarServiceMock" />

在工程中提供 Mock 實現 [2]網絡

package com.foo;
public class BarServiceMock implements BarService {
    public String sayHello(String name) {
        // 你能夠僞造容錯數據,此方法只在出現RpcException時被執行
        return "容錯數據";
    }
}

若是服務的消費方常常須要 try-catch 捕獲異常,如:函數

Offer offer = null;
try {
    offer = offerService.findOffer(offerId);
} catch (RpcException e) {
   logger.error(e);
}

請考慮改成 Mock 實現,並在 Mock 實現中 return null。若是隻是想簡單的忽略異常,在 2.0.11 以上版本可用:spa

<dubbo:reference interface="com.foo.BarService" mock="return null" />
  1. Mock 是 Stub 的一個子集,便於服務提供方在客戶端執行容錯邏輯,因常常須要在出現 RpcException (好比網絡失敗,超時等)時進行容錯,而在出現業務異常(好比登陸用戶名密碼錯誤)時不須要容錯,若是用 Stub,可能就須要捕獲並依賴 RpcException 類,而用 Mock 就能夠不依賴 RpcException,由於它的約定就是隻有出現 RpcException 時才執行。 ↩︎code

  2. 在 interface 旁放一個 Mock 實現,它實現 BarService 接口,並有一個無參構造函數 ↩︎htm

參考文獻:http://dubbo.incubator.apache.org/zh-cn/docs/user/demos/local-mock.html接口

相關文章
相關標籤/搜索