若默认配置不能满足您的需求时,您可以自定义应用触发流控、降级或系统规则后的逻辑。本文将介绍适用于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());
文档内容是否对您有帮助?