spring-cloud-gateway
spring-cloud-gateway copied to clipboard
Spring-cloud-gateway : Request-rate-limiting not working
@GuyLewin @royclarkson @rmorgan @jvalkeal @scottfrederick
I have configured 60 requests per minute as per the formula defined in Redis-Ratelimiter (Note: Spring-boot 2.7.2 version, Spring-cloud-gateway 3.1.3) but it is not working as expected i.e. within a minute I am able to request > 60 requests.
I have derived below formula:
burstCapacity = number of requests (replenishRate) * time unit is seconds (requestedTokens)
Java class:
@SpringBootApplication
public class MtAmpApigatewayApplication {
public static void main(String[] args) {
SpringApplication.run(MtAmpApigatewayApplication.class, args);
}
@Bean
public KeyResolver userKeyResolver() {
return exchange -> Mono.just("1");
}
}
application.yml configuration:
args:
## configuration for 60 requests per minute
"[redis-rate-limiter.replenishRate]": 60 # 60 requests
"[redis-rate-limiter.burstCapacity]": 3600 # burstCapacity = replenishRate * requestedTokens
"[redis-rate-limiter.requestedTokens]": 60 # 60 seconds = 1 min
but the above configuration is not working as expected. So can you
-
Provide the formula for calculating API rate limiting for different combination
-
And also provide the
rate limiting configuration for 60 requests/1 minute.<dependencies> <!-- API gateway dependencies --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-webflux</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-gateway</artifactId> </dependency> <!-- redis --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis-reactive</artifactId> </dependency> </dependencies>