服務降級

降級 Dubbo 服務

功能說明

建議使用相關的限流降級組件(例如 Sentinel)來達到最佳體驗。參考範例實踐:微服務治理/限流降級

服務降級是指在異常情況下對服務進行降級的應急處理方案。

使用場景

  • 當某個服務或介面的負載超過最大承載能力範圍時,需要降級應急處理,避免系統崩潰
  • 當調用的非核心服務或介面暫時不可用時,返回模擬數據或空值,業務可以繼續可用
  • 降級非核心業務服務或介面,釋放系統資源,盡量保證核心業務的正常運行
  • 當上游基礎服務超時或不可用時,執行可以快速回應的降級方案,避免服務整體雪崩

使用方法

以 xml 配置為例:(通過註解配置類似)

1. 配置 mock="true"

範例

<dubbo:reference id="demoService" interface="com.xxx.service.DemoService" mock="true" />

此方法要求在同一個包下有類名 + Mock 後綴的實現類,即在 com.xxx.service 包下有 DemoServiceMock 類。

2. 配置 mock="com.xxx.service.DemoServiceMock"

範例

<dubbo:reference id="demoService" interface="com.xxx.service.DemoService" mock="com.xxx.service.DemoServiceMock" />

此方法指定 Mock 類的完整路徑。

3. 配置 mock="[fail|force]return|throw xxx"

  • fail 或 force 關鍵字可選,表示調用失敗或不調用強制執行 mock 方法,如果沒有指定關鍵字,預設為 fail
  • return 表示指定返回結果,throw 表示拋出指定的異常
  • xxx 根據介面的返回類型解析,可以指定返回值或拋出自定義異常

範例

<dubbo:reference id="demoService" interface="com.xxx.service.DemoService" mock="return" />
<dubbo:reference id="demoService" interface="com.xxx.service.DemoService" mock="return null" />
<dubbo:reference id="demoService" interface="com.xxx.service.DemoService" mock="fail:return aaa" />
<dubbo:reference id="demoService" interface="com.xxx.service.DemoService" mock="force:return true" />
<dubbo:reference id="demoService" interface="com.xxx.service.DemoService" mock="fail:throw" />
<dubbo:reference id="demoService" interface="com.xxx.service.DemoService" mock="force:throw java.lang.NullPointException" />

4. 與 dubbo-admin 配合使用

以服務方法的維度設定規則,設定返回的 mock 資料,並動態啟用/禁用規則

注意事項

Dubbo 啟動時會檢查設定。當 mock 屬性值設定錯誤時,將無法啟動。您可以根據錯誤訊息進行故障排除