springBoot GateWay作为所有程序的入口,所以当流量进来的时候都会从网关(GateWay)通过,在网关除了做权限认证过滤,路由转发,还可以做流量限制:

流量限制

springBoot默认是由一个限流的配置,默认集成的配置。

使用的redis配合RateLimter限流算法来实现。

1.引入依赖:


 2.添加配置:

在springBoot 中application.yml 中配置

routes:
‐ id: goods
  uri: lb://XXX
  predicates:
  ‐ Path=/XXX/**
  filters:
  ‐ StripPrefix= 1
  ‐ name: RequestRateLimiter              #添加GateWay请求数限流配置,这个名字不能随便写固定的样式
    args:
      key‐resolver: "#{@ipKeyResolver}"    #这个就是对应自己写限流bean 配置的方法的名称
      redis‐rate‐limiter.replenishRate:  2     #令牌桶每秒填充平均速率
      redis‐rate‐limiter.burstCapacity:  3     #令牌桶总容量

这个就表示每秒并发数为3,如果超过3个那么就会进行限流,或者在filter中加入熔断器设置,这样并发数大了,就会返回一个友好界面。防止直接报错给用户,给用户的体验不好

(3)在启动类中 定义一个KeyResolver

  @Bean
    public KeyResolver ipKeyResolver(){
        return new KeyResolver() {
            @Override
            public Mono<String> resolve(ServerWebExchange exchange) {
                return Mono.just(exchange.getRequest().getRemoteAddress().getHostName());
            }
        };
    }
 

然后就可以自己进行测试测试数据,进行并发测试

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐