外观
接口限流拦截器 🚦
功能介绍 💡
WARNING
接口限流拦截器就像一个智能红绿灯系统,通过令牌桶算法来控制接口访问流量,支持集群限流。它能有效防止系统被过度访问,保护系统稳定运行。
限流方式 🔄
限流类型 | 类型值 | 说明 | 应用场景 |
---|---|---|---|
全局限流 | all | 针对所有请求进行限流 | 控制系统总体访问量 |
令牌限流 | authorization | 基于用户令牌的限流 | 控制单个用户访问频率 |
IP限流 | ip | 基于访问者IP的限流 | 防止单IP频繁访问 |
商户限流 | merchant | 基于商户身份的限流 | 控制商户API调用量 |
接口限流 | path | 基于接口路径的限流 | 保护特定接口不被滥用 |
详细配置说明 ⚙️
核心参数说明
参数名 | 类型 | 必填 | 默认值 | 说明 |
---|---|---|---|---|
enabled | boolean | 否 | false | 是否启用限流器 |
rules | array | 是 | - | 限流规则列表 |
限流规则配置详解 (rules)
参数名 | 类型 | 必填 | 默认值 | 说明 |
---|---|---|---|---|
type | array | 是 | - | 限流类型(可多选组合) |
urls | array | 是 | - | 需要限流的URL地址列表 |
replenish-rate | float | 否 | - | 令牌产生速率(个/秒) |
burst-capacity | float | 否 | - | 令牌桶容量 |
requested-tokens | float | 否 | - | 每次请求消耗令牌数 |
restore | boolean | 否 | false | 是否允许重置令牌 |
配置示例 📋
1. 全局限流配置
yaml
gateway:
filter:
rate-limiter:
enabled: true
rules:
- type: # 全局限流
- all
urls: # 限流路径
- /demo/**
replenish-rate: 1 # 每秒产生1个令牌
burst-capacity: 1 # 令牌桶容量1个
requested-tokens: 1 # 每次请求消耗令牌数
2. 接口级别限流
yaml
gateway:
filter:
rate-limiter:
enabled: true
rules:
- type: # 按接口路径限流
- path
urls:
- /demo/**
replenish-rate: 1 # 每个接口每秒1次请求
burst-capacity: 1
requested-tokens: 1 # 每次请求消耗令牌数
3. 多维度组合限流
yaml
gateway:
filter:
rate-limiter:
enabled: true
rules:
- type:
- path
- authorization # 同时按路径和令牌限流
urls:
- /demo/**
replenish-rate: 1
burst-capacity: 1
requested-tokens: 1
4. 自定义时间窗口限流
yaml
gateway:
filter:
rate-limiter:
enabled: true
rules:
- type:
- path
- authorization
urls:
- /demo/**
replenish-rate: 1 # 每秒产生1个令牌
burst-capacity: 60 # 最多存储60个令牌
requested-tokens: 60 # 每次请求消耗60个令牌(相当于每分钟允许1次请求)
响应头说明 📋
当请求被限流处理后,网关会在响应头中添加以下信息:
响应头名称 | 说明 | 示例值 |
---|---|---|
X-RateLimit-Remaining | 当前剩余可用令牌数 | 5 |
X-RateLimit-Replenish-Rate | 令牌生成速率(每秒) | 1.0 |
X-RateLimit-Burst-Capacity | 令牌桶最大容量 | 10.0 |
X-RateLimit-Requested-Tokens | 本次请求消耗的令牌数 | 1.0 |
X-RateLimit-Restore-Code | 限流恢复码(仅在开启恢复功能时返回) | 550e8400-e29b-41d4-a716-446655440000 |
TIP
- 通过响应头信息可以了解当前限流状态
- 可根据剩余令牌数调整请求频率
- 限流恢复码可用于特殊场景下的限流解除
最佳实践 💡
限流策略选择
- 优先考虑业务场景需求
- 合理设置令牌生成速率
- 根据接口重要性设置不同策略
性能优化建议
- 避免过于频繁的限流检查
- 合理设置令牌桶容量
- 注意集群环境的同步问题
监控和告警
- 监控限流情况
- 设置限流告警阈值
- 定期分析限流日志
常见问题 ❓
请求被限流
- 检查当前限流规则配置
- 验证令牌桶容量是否合理
- 确认是否存在突发流量
限流不生效
- 确认限流器是否启用
- 检查URL匹配规则
- 验证限流类型配置
令牌消耗过快
- 检查令牌生成速率
- 优化请求频率
- 调整令牌桶容量
安全提示 ⚠️
CAUTION
- 合理配置限流阈值,避免影响正常业务
- 关注限流日志,及时发现异常访问
- 考虑设置限流告警机制
- 定期评估和调整限流策略