若默認配置不能滿足您的需求時,您可以自定義應用觸發流控、降級或系統規則后的邏輯。本文將介紹適用于SDK接入方式的邏輯配置方法。
Spring Cloud Gateway
若您的網關是Spring Cloud Gateway,則默認的限流處理邏輯是返回默認的流控文本Blocked by Sentinel
,返回status code
為429 Too Many Requests
。您可以通過以下Spring配置項來配置限流后的處理策略。
spring.cloud.sentinel.scg.fallback.mode
:限流處理策略,目前支持跳轉redirect
和自定義返回response
兩種策略。spring.cloud.sentinel.scg.fallback.redirect
:限流之后的跳轉URL,僅在mode=redirect的時候生效。spring.cloud.sentinel.scg.fallback.response-body
:限流之后的返回內容,僅在mode=response的時候生效。spring.cloud.sentinel.scg.fallback.response-status
:限流之后的返回status code
,僅在mode=response的時候生效。
除此之外,您也可以在GatewayCallbackManager上通過setBlockHandler注冊函數實現自定義的邏輯處理被限流的請求,對應接口為BlockRequestHandler
,編寫邏輯可參考DefaultBlockRequestHandler
默認實現類。
說明 YAML文件請注意轉成YAML配置的形式。
Zuul 1.x
若您的網關是Zuul 1.x,則默認的限流處理邏輯是返回默認的流控文本,返回status code
為429 Too Many Requests
。
您可以通過注冊回調的方式定制處理異常,示例如下。
// 自定義FallbackProvider。
public class MyBlockFallbackProvider implements ZuulBlockFallbackProvider {
@Override
public String getRoute() {
// 對應的route或API group。
return "book-service";
}
@Override
public BlockResponse fallbackResponse(String route, Throwable cause) {
if (cause instanceof BlockException) { // AHAS流控、降級、系統保護異常。
return new BlockResponse(429, "Blocked by AHAS Sentinel", route);
} else {
return new BlockResponse(500, "System Error", route);
}
}
}
// 注冊FallbackProvider。
ZuulBlockFallbackManager.registerProvider(new MyBlockFallbackProvider());
文檔內容是否對您有幫助?