限流
yeah-flowcontrol 提供注解式接口限流。它适合登录、验证码、上传和公开查询等需要控制请求频率的入口。
基本用法
java
@RateLimit(
groupType = GroupType.IP,
limitGroupCount = 20,
timeWindow = 60_000,
description = "同一IP一分钟最多请求20次"
)分组方式
| 类型 | 含义 | 适用场景 |
|---|---|---|
NONE | 不分组 | 整个接口统一统计 |
IP | 按来源 IP | 匿名登录、验证码、公开接口 |
CUSTOM | SpEL 自定义分组 | 用户名、业务主体、终端等维度 |
主要参数:
limitCount:整体限制数量。limitGroup:允许的分组数量。limitGroupCount:每个分组内数量。timeWindow:时间窗口,单位毫秒。bucketSize:窗口桶大小。dynamicTimeWindow:是否使用动态时间窗口。global:是否作为全局规则参与统计。description:规则说明。
登录的两层保护
管理后台登录当前包含:
- IP 维度接口限流,防止单一来源高频请求。
- 用户名 + 终端维度失败次数与临时锁定。
两者职责不同。解除登录限制只清理账号失败统计,不应关闭 IP 接口限流。
使用原则
- 匿名接口优先按 IP,再结合业务主体。
- 已登录高价值操作可以按用户 ID 分组。
- 不要把真实 Token、手机号等直接放进可读 Redis Key;必要时使用稳定摘要。
- 限流异常应返回明确提示,但不要泄露内部计数细节。
- 分布式部署必须确保所有实例共享同一计数存储。
当前边界
注解中的全局限流参数仍属于待完善能力。使用前以当前代码实现为准,不要只根据注解字段推断已经支持全部策略。