package com.xxx.aop;
import com.google.common.util.concurrent.RateLimiter;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.Pointcut;
import org.springframework.context.annotation.Lazy;
import org.springframework.stereotype.Component;
@Aspect
@Component
public class RateLimiterAspect {
//这里create方法参数表示每秒并发10次,每秒10次的请求会直接执行,超过的每秒10次的会等待并以每秒10次的速度执行
RateLimiter rateLimiter = RateLimiter.create(10);
/**
* 切点表达式
*/
@Pointcut("execution(public * com.xxx.controller.*.*(..))")
public void pointcutMath() {}
@Before("pointcutMath()")
public void before() {
System.out.println("=================我是限流拦截器==================");
System.out.println("=======等待时间:"+rateLimiter.acquire());
}
}
使用Guava的RateLimiter工具类和Spring Aop实现简单限流
最新推荐文章于 2024-07-25 18:45:04 发布