每个API接口都有自己的访问极限,实现接口限流,保护应用以及服务器的正常运行。
方式一: Java处理
令牌桶处理:(使用RateLimiter工具)
①引入jar包
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>27.0.1-jre</version>
</dependency>
② 编写接口
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface Ide {
}
③ aop处理
@Aspect
@Component
public class LeLogAspect {
@Autowired
private SyslogOperationService syslogOperationService;
// 并发数为10
private RateLimiter rateLimiter = RateLimiter.create(10);
@Pointcut("@annotation(com.laiease.common.annotation.Lelog)")
public void logPointCut() {
}
/**
* 使用 RateLimiter 限制流量
* @param joinPoint
* @version 2.0
*/
@Before("logPointCut()")
public void beforeMethod(JoinPoint joinPoint) {
boolean b = rateLimiter.tryAcquire();
if (!b) {
throw new RuntimeException("网络繁忙,请稍候再试!");
}
}
}
方式一: tomcat处理
暂未尝试
版权声明:本文为qq_20314665原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。