一、功能说明
RequestRateLimiterGatewayFilterFactory
是 Spring Cloud Gateway 的流量控制组件,用于实现 API 请求速率限制,核心功能包括:
- 限制单位时间内的请求数量(如每秒10次)
- 防止服务被突发流量击垮(通过令牌桶算法)
- 支持分布式限流(依赖Redis存储)
- 可自定义限流维度(按IP、用户ID等)
二、工作原理图
1. 动态流程(时序图)
2. 静态架构(类图)
三、示例
1. 配置示例(application.yml)
spring:cloud:gateway:routes:- id: rate-limit-routeuri: http://backend-servicepredicates:- Path=/api/**filters:- name: RequestRateLimiterargs:redis-rate-limiter:replenishRate: 10 # 每秒生成10个令牌burstCapacity: 20 # 令牌桶容量key-resolver: "#{@ipKeyResolver}" # 按IP限流
2. 自定义KeyResolver
@Bean
public KeyResolver ipKeyResolver() {return exchange -> Mono.just(exchange.getRequest().getRemoteAddress().getAddress().getHostAddress());
}
3. 触发限流时的响应
HTTP/1.1 429 Too Many Requests
X-RateLimit-Remaining: 0
X-RateLimit-Retry-After: 1
Content-Type: application/json{"error": "Too many requests","message": "You have exhausted your API request quota"
}
四、关键机制解析
组件 | 作用 |
---|---|
RedisRateLimiter | 基于令牌桶算法实现限流,依赖Redis存储计数 |
KeyResolver | 定义限流维度(如IP、用户ID、API路径等) |
replenishRate | 令牌填充速率(如10=每秒10个请求) |
burstCapacity | 突发流量容量(允许短时间内超过replenishRate的最大值) |
五、应用场景
- 防御CC攻击:限制单个IP的疯狂刷接口行为
- API分级管控:为VIP用户分配更高的请求配额
- 服务降级:在系统高负载时主动限流保核心功能
如果需要更复杂的限流策略(如滑动窗口、漏桶算法),可以自定义实现 RateLimiter
接口。