Spring Cloud Gateway使用限流器

1.引入reactive redis maven坐标

        
        
            org.springframework.boot
            spring-boot-starter-data-redis-reactive
        
        
        
            org.apache.commons
            commons-pool2
        

2.定义限流规则

@Configuration
public class KeyResolverConfig {

    @Primary
    @Bean
    public KeyResolver apiKeyResolver() {
        // 通过URL限流
        return exchange -> Mono.just(exchange.getRequest().getURI().getPath());
    }
}

3.配置限流过滤器,完成

spring:
  cloud:
    gateway:
      routes:
        - id: 用户服务
          uri: lb://user-server
          predicates:
            - Path=/user-server/**
          filters:
            # 配置限流过滤器
            - name: RequestRateLimiter
              args:
                key-resolver: "#{@apiKeyResolver}"
                redis-rate-limiter:
                  # 每秒补充令牌数量
                  replenishRate: 1
                  # 令牌桶最大容量,突发请求数量
                  burstCapacity: 1
                  # 每次请求消耗令牌的数量
                  requestedTokens: 1

另外还有redis的配置

spring:
  redis:
    enabled: true
    type: 1
    host: localhost
    port: 6379
    password:
    timeout: 10000
    database: 8
    ttl: 60
    lettuce:
      pool:
        max-active: 500
        max-idle: 10
        min-idle: 2
        max-wait: 3000
      shutdown-timeout: 10000
      command-timeout: 60000

源码位置:

Spring Cloud Gateway使用限流器_第1张图片

注意:requestedTokens参数是Hoxton及以上版本功能

通过replenishRate、burstCapacity、requestedTokens可以实现任意时间单位的限流,如:

每秒钟允许请求3次:

redis-rate-limiter:
  # 每秒补充令牌数量
  replenishRate: 3
  # 令牌桶最大容量,突发请求数量
  burstCapacity: 3
  # 每次请求消耗令牌的数量
  requestedTokens: 1

每分钟(60秒钟)允许请求1次:

redis-rate-limiter:
  # 每秒补充令牌数量
  replenishRate: 1
  # 令牌桶最大容量,突发请求数量
  burstCapacity: 60
  # 每次请求消耗令牌的数量
  requestedTokens: 60

建议使用版本:

    
        
            
                org.springframework.boot
                spring-boot-dependencies
                2.3.5.RELEASE
                pom
                import
            
            
                org.springframework.cloud
                spring-cloud-dependencies
                Hoxton.SR12
                pom
                import
            
        
    

你可能感兴趣的:(Spring系列,spring,cloud,gateway,限流)