Dubbo服務降級設定

擊水三千里發表於2019-03-18

dubbo降級服務    
dubbo開發中,通常是微服務架構,那麼在使用過程中可能會遇到多種問題:

1)多個服務之間可能由於服務沒有啟動或者網路不通,呼叫中會出現遠端呼叫失敗;

2) 服務請求過大,需要停止部分服務以保證核心業務的正常執行;

以上兩個問題可以使用Dubbo的服務降級來實現;
即:在服務宕掉或者併發數太高導致的RpcException異常時,進行友好的處理或者提示,而不是內部報錯導致系統不可用。

解決方法:
dubbo提供了mock配置,可以很好的實現dubbo服務降級,
mock主要有兩種配置方式,

第1種
在遠端呼叫異常時,服務端直接返回一個固定的字串(也就是寫死的字串)
具體配置:
在服務呼叫方配置mock引數:
<dubbo:reference id="xxxService" interface="com.x..service.xxxxService" check="false" mock="return 123456..." />

說明:配置了mock引數之後,假設在呼叫服務的時候,遠端服務沒有啟動,或者各種網路異常了,那遠端服務會把這個mock配置的值返回,也就是會返回123456...
通過這種方式就可以避免了因為服務呼叫不了而出現異常錯誤而帶來的程式不可用(起碼是有值返回的,然後可以根據值進行業務邏輯處理判斷等等)。
注:除了配置mock引數之外,其它地方不用變。

第2種
在遠端呼叫異常時,服務端根據自定義mock業務處理類進行返回)
具體配置:
在服務呼叫方配置mock引數:
<dubbo:reference id="xxxService" interface="com.x..service.xxxxService" check="false" mock="true" />

說明:配置了mock引數之後,假設在呼叫服務的時候,遠端服務沒有啟動,或者各種網路異常了,那遠端服務會去尋找自定義的mock業務處理類進行業務處理。
因此還需配置一個自定義mock業務處理類
在介面服務xxxxService的目錄下建立相應的mock業務處理類,同時實現業務介面xxxxService(),介面名要注意命名規範:介面名+Mock字尾,mock實現需要保證有無參的構造方法。
public class xxxxServiceMock implements xxxxService {
    @Override
    public String getXXXX(int id) {
        return "this is exception 自定義....";
    }
}
配置完成後,此時如果呼叫失敗會呼叫自定義的Mock業務實現。
注:除了以上兩處之外,其它地方不用變。

 

管理介面手動配置:

以上的配置其實除了在程式碼中配置之外,還可以在dubb-adming管理介面直接手動配置:

分別是遮蔽和容錯:

遮蔽:force.mock (即:遮蔽請求,直接返回某個值,如上面的字串,mock="return 123456...");

容錯:fail.mock  (即:允許請求,在請求失敗的時候,再返回某個值,如:mock="fail:return 123456...");
 

相關文章