使用 aop + guava 为 springboot 应用做限流
1. 引入 guava 依赖
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
</dependency>
编写切面类
对 所有的controller 都做了限流
@Component
@Aspect
public class GlobalAspect {
/// QPS 为 3
private RateLimiter rateLimiter= RateLimiter.create(3);
@Pointcut("execution(* cc.library.main.controller..*.*(..))")
public void pc() {}
@Before("cc.library.main.aspect.GlobalAspect.pc()")
public void before() throws Throwable {
boolean flag = rateLimiter.tryAcquire();
if (!flag) {
throw new LibraryException(R.ERROR, "请求次数过多,看会番吧亲");
}
}
}