服務降級
降級 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 屬性值設定錯誤時,將無法啟動。您可以根據錯誤訊息進行故障排除