spring-cloud-gateway使用-限流

代码在:
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 resolve(ServerWebExchange exchange);
    }

这里我们使用host来限流
public class AppIdKeyResolver implements KeyResolver {
@Override
public Mono 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使用-限流)