spring cloud gateway 自带令牌桶限流,限流生效时返回状态码“429”。
插件参数说明:
令牌桶每秒填充速率(redis-rate-limiter.replenishRate):是你允许用户每秒执行多少请求,而不丢弃任何请求。这是令牌桶的填充速率。 令牌桶可以容纳的令牌数量(redis-rate-limiter.burstCapacity):是允许用户在一秒钟内执行的最大请求数。这是令牌桶可以保存的令牌数。将此值设置为零将阻止所有请求。 请求从存储桶中获取的令牌数(redis-rate-limiter.requestedTokens):是每个请求消耗多少个令。
稳定速率是通过在replenishRate(令牌桶每秒填充速率) 和 burstCapacity(令牌桶可以容纳的令牌数量)中设置相同的值来实现的。 可通过设置burstCapacity高于replenishRate来允许临时突发流浪。在这种情况下,限流器需要在两次突发之间留出一段时间(根据replenishRate),因为连续两次突发将导致请求丢失 (HTTP 429 - Too Many Requests).。
要限制每秒一个请求,可以将replenishRate设置为目标请求数,requestedTokens设置目标的时间秒数,burstCapacity为replenishRate * requestedTokens。如:设置replenishRate=1,requestedTokens=60 和 burstCapacity=60,就是限制每分钟1个请求。
限流生效时效果如下: