關於springcloud Gateway中的限流

咱們在開發系統的時候可能會對系統進行限流的需求, springcloudGateway有自帶限流的方案,在此以前能夠先去學習一下springcloud gateway中的filter。
springcloud Gateway中提供了一個RequestRateLimiterGatewayFilterFactory。
這種限流方式用到了redis, 先添加redis的依賴。redis

配置類以下:算法

public class RemoteAddrKeyResolver implements KeyResolver {

    public static final String BEAN_NAME = "remoteAddrKeyResolver";

    @Override
    public Mono<String> resolve(ServerWebExchange exchange) {
        System.out.println("hello");
        Mono<String> just = Mono.just(exchange.getRequest().getRemoteAddress().getAddress().getHostAddress());
        return just;
    }
}
@Configuration
public class RemoteKeyResolver {

    @Bean(name="remoteAddrKeyResolver")
    public RemoteAddrKeyResolver remoteAddrKeyResolver() {
        return new RemoteAddrKeyResolver();
    }
}

在此咱們是根據ip地址限流的, Mono<String> just = Mono.just(exchange.getRequest().getRemoteAddress().getAddress().getHostAddress())spring

application.yml配置文件配置以下:api

spring:
  application:
    name: gateway-service
#  redis:
#    database: 0
#    host: localhost
#    port: 6379
#    password:
#    timeout: 1000ms
#    lettuce:
#      pool:
#        max-active: 8
#        max-idle: 8
#        min-idle: 1
#        max-wait: 1000ms
#  cache:
#    type: REDIS
  cloud:
    gateway:
      discovery:
        locator:
          enabled: true
      routes:
        - id: order
          uri: lb://order-service
          predicates:
          - Path=/api/order-service/**
          filters:
          - StripPrefix=1
          - name: RequestRateLimiter
            args:
              key-resolver: '#{@remoteAddrKeyResolver}'
              redis-rate-limiter.replenishRate: 1
              redis-rate-limiter.burstCapacity: 2

上面貼出的是完整的springcloud Gateway的配置, 主要配置爲filters下的-RequestRateLimiter,
key-resolver表示使用名爲remoteAddKeyResolver的限流配置配置類,此限流方式採用的是令牌桶算法的限流方式
redis-rate-limiter.repleushRate :令牌桶每秒填充平均速率。
redis-rate-limiter.burstCapacity: 令牌桶的總容量app

相關文章
相關標籤/搜索