在Spring Cloud Gateway中配置限流规则,通常使用内置的RequestRateLimiterGatewayFilterFactory
过滤器工厂,结合Redis来实现令牌桶算法进行限流。以下是配置限流规则的步骤:
1. 添加依赖
首先,确保你的项目中已经添加了Spring Cloud Gateway和Spring Boot Starter Data Redis的依赖。
xml
org.springframework.cloud spring-cloud-starter-gateway org.springframework.boot spring-boot-starter-data-redis-reactive2. 配置Redis
在application.yml
或application.properties
中配置Redis连接信息。
yaml
spring:
redis:
host: localhost
port: 6379
password: yourpassword
3. 配置限流规则
在路由配置中添加RequestRateLimiter
过滤器,并配置相应的参数。
以下是一个示例配置:
yaml
spring:
cloud:
gateway:
routes:
- id: my-route
uri: lb://SERVICE-NAME
predicates:
- Path=/path/**
filters:
- name: RequestRateLimiter
args:
redis-rate-limiter.replenishRate: 10 # 令牌桶每秒填充速率
redis-rate-limiter.burstCapacity: 20 # 令牌桶的总容量
redis-rate-limiter.requestedTokens: 1 # 每个请求需要消耗的令牌数量
在上面的配置中:
replenishRate
:令牌桶每秒填充的令牌数量。burstCapacity
:令牌桶可以保存的最大令牌数量。requestedTokens
:每个请求需要消耗的令牌数量,默认为1。
4. 自定义限流配置
如果你需要更复杂的限流策略,可以自定义RateLimiter
实现,并将其注册为Bean。
java
@Bean
public RedisRateLimiter customRateLimiter() {
return new RedisRateLimiter(10, 20);
}
然后在路由配置中使用自定义的限流器:
yaml
filters:
- name: RequestRateLimiter
args:
rate-limiter: “#{@customRateLimiter}”
5. 测试限流
启动你的Spring Cloud Gateway服务,并通过客户端工具(如Postman或curl)对配置了限流的路径发送请求。如果请求超过了配置的速率限制,你将收到一个HTTP 429 Too Many Requests的响应。
请注意,限流配置需要结合实际业务需求和系统容量进行合理设置,以确保系统的稳定性和性能。