package com.shuixian.jianghao.utils;
import com.google.common.util.concurrent.RateLimiter;
public class LimitUtil {
//每秒发出100个令牌,限制并发量为100
private static RateLimiter rateLimiter=RateLimiter.create(100);
public static boolean tryAcquire(){
return rateLimiter.tryAcquire();
}
}
还要引入依赖包:
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>18.0</version>
</dependency>
用的时候,可以把这个限流工具类声明成Bean,然后注入到控制器中,处理请求之前先调用方法获取令牌,如果获取到了就继续进行请求,否则驳回,达到限流的目的。
或者也可以配置一个全局拦截器,在拦截器中获取令牌,获取不到返回false,中断请求,同时返回错误信息,提示用户。