美文网首页
spring-cloud-gateway使用-限流

spring-cloud-gateway使用-限流

作者: sleepforests | 来源:发表于2019-07-16 13:24 被阅读0次

    代码在:
    https://gitee.com/sleepforests/spring-cloud-gateway-demo

    spring cloud gateway内置了限流filter,通过配置及简单开发即可完成限流逻辑。

    scg使用令牌桶算法来实现限流,需要使用redis来支持集群模式。

    下面是最简单的一个配置:

        filters:
        - name: RequestRateLimiter
          args:
            key-resolver: '#{@appIdKeyResolver}'
            redis-rate-limiter.replenishRate: 1
            redis-rate-limiter.burstCapacity: 3
    

    其中,key-resolver是限流的key,比如我们使用host来计算流量、使用userId来计算流量、使用appId计算流量等。scg提供了一个接口,我们来实现,这里配置的是bean的id。

    接口如下:

    /**

    • @author Spencer Gibb
      */
      public interface KeyResolver {
      Mono<String> resolve(ServerWebExchange exchange);
      }

    这里我们使用host来限流
    public class AppIdKeyResolver implements KeyResolver {
    @Override
    public Mono<String> resolve(ServerWebExchange exchange) {
    return Mono.just(exchange.getRequest().getQueryParams().getFirst("appId"));
    }
    }

    @Bean
    public AppIdKeyResolver appIdKeyResolver() {
    return new AppIdKeyResolver();
    }

    几点问题:
    1、依赖redis,对于高qps的情况下其实有问题;
    2、有一个限流的lua脚本,可以上去看看具体的逻辑,我没怎么看;
    3、限流之后直接给用户报错,不知道有没有扩展点能提供一个友好的提示给用户,或者其他兜底措施;

    相关文章

      网友评论

          本文标题:spring-cloud-gateway使用-限流

          本文链接:https://www.haomeiwen.com/subject/vjktcctx.html