Annotation Interface RateLimit
接口限流注解
标记在Controller方法或类上,表示需要进行限流控制
主要功能: 1. 限制单位时间内的请求次数 2. 支持多种限流算法(令牌桶、滑动窗口、固定窗口) 3. 支持多种限流维度(用户ID、IP、接口)
使用示例:
// 按IP限流,每分钟60个请求(key 默认即 #ip)
@RateLimit(permitsPerMinute = 60)
@PostMapping("/api/login")
public Result login(HttpServletRequest request) {
}
// 按请求参数限流,每秒10个请求(#xxx 取 query/表单参数值)
@RateLimit(key = "#mobile", permitsPerSecond = 10)
@PostMapping("/api/sms/send")
public Result sendSms(@RequestParam String mobile) {
}
// 固定key限流,每小时10次(普通字符串为固定key,所有请求共享限流桶)
@RateLimit(key = "order:create", permitsPerHour = 10, algorithm = RateLimitAlgorithm.SLIDING_WINDOW, message = "操作过于频繁,请1小时后再试")
@PostMapping("/api/order")
public Result createOrder() {
}
key 语义(H8 修正,非 SpEL):
#ip:内置快捷方式,按客户端 IP 限流(默认值)#参数名:按请求 query/表单参数值限流(参数缺失时记录 warn 日志并回退为按接口 URI 限流)- 普通字符串:固定 key(所有请求共享同一限流桶)
- Author:
- Kerbores(kerbores@riemann.tech)
-
Optional Element Summary
Optional ElementsModifier and TypeOptional ElementDescription限流算法限流key限流类型自定义错误提示int每小时允许的请求数int每分钟允许的请求数double每秒允许的请求数
-
Element Details
-
key
String key限流key语义(非 SpEL,H8 修正):
"#ip":内置快捷方式,按客户端 IP 限流(默认值)"#参数名":按请求 query/表单参数值限流,如"#userId"取参数 userId 的值; 参数缺失时记录 warn 日志并回退为按接口 URI 限流"固定字符串":固定 key,所有请求共享同一限流桶,如"api:order"
- Returns:
- 限流key表达式,默认#ip
- Default:
"#ip"
-
permitsPerSecond
double permitsPerSecond每秒允许的请求数- Returns:
- 每秒请求数,默认0(不启用)
- Default:
0.0
-
permitsPerMinute
int permitsPerMinute每分钟允许的请求数- Returns:
- 每分钟请求数,默认0(不启用)
- Default:
0
-
permitsPerHour
int permitsPerHour每小时允许的请求数- Returns:
- 每小时请求数,默认0(不启用)
- Default:
0
-
algorithm
-
limitType
-
message
String message自定义错误提示- Returns:
- 错误提示信息
- Default:
"\u8bf7\u6c42\u8fc7\u4e8e\u9891\u7e41\uff0c\u8bf7\u7a0d\u540e\u518d\u8bd5"
-