Skip to content

接口限流

简介

在接口方法上使用 @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 分级限流,需在网关或业务层扩展。

Released under the MIT License.