接口限流
简介
在接口方法上使用 @RateLimit,基于 Guava RateLimiter 控制该方法的 QPS,超出时抛出业务异常提示「请求过快」。
框架行为(与代码一致)
| 项目 | 说明 |
|---|---|
| 注解 | com.sxpcwlkj.common.annotation.RateLimit,仅可标注在方法上 |
| 属性 | permitsPerSecond():每秒允许的请求次数(double) |
| 切面 | com.sxpcwlkj.framework.aop.RateLimitAspect |
| 维度 | 以 类全名.方法名 为键,每个方法一个 RateLimiter 实例(见切面内 ConcurrentHashMap) |
| 超限 | 抛出 MmsException,文案:请求过快,请稍后再试! |
| 部署 | 进程内单机限流:多实例、K8s 多 Pod 不会共享计数;需要全局限流时请改用网关或 Redis 等方案 |
使用示例
java
import com.sxpcwlkj.common.annotation.RateLimit;
import cn.dev33.satoken.annotation.SaIgnore;
@RateLimit(permitsPerSecond = 1.0)
@SaIgnore
@GetMapping("/")
public String index() {
return "Hello";
}可与 @SaIgnore 等注解同用;限流在切面中先于业务执行。
适用场景说明
限流有助于缓解突发流量、简单防刷、保护下游资源;不能替代 WAF、防 DDoS 或分布式配额。若需按用户/IP 分级限流,需在网关或业务层扩展。
