使用 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, "请求次数过多,看会番吧亲");
        }
    }

}
posted @ 2022-12-06 04:24  yangruomao  阅读(75)  评论(0编辑  收藏  举报