触发网关防护规则后的限流策略

若默认配置不能满足您的需求时,您可以自定义应用触发流控、降级或系统规则后的逻辑。本文将介绍适用于SDK接入方式的逻辑配置方法。

Spring Cloud Gateway

若您的网关是Spring Cloud Gateway,则默认的限流处理逻辑是返回默认的流控文本Blocked by Sentinel,返回status code429 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 code429 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());