java guava限流,Guava的RateLimiter实现接口限流
最近開發(fā)需求中有需要對后臺接口進行限流處理,整理了一下基本使用方法。
首先添加guava依賴:
com.google.guava
guava
23.0
然后封裝RateLimiter適用對多接口的限制:
import com.google.common.util.concurrent.RateLimiter;
import org.springframework.util.StringUtils;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.TimeUnit;
public class RateLimiterFactory {
private static ConcurrentHashMap limiterMap = new ConcurrentHashMap<>();
//每秒許可證數(shù)量
private static double permitsPerSecond = 1000;
//等待超時時間
private static long timeout = 4L;
/**
*@param apiId 對應接口的id
*@description 獲取許可
*/
public static boolean tryAcquire(String apiId) {
//如果傳入apiId為空則返回true
if (StringUtils.isEmpty(apiId)) {
return true;
}
limiterMap.putIfAbsent(apiId, RateLimiter.create(permitsPerSecond));
return limiterMap.get(apiId).tryAcquire(timeout, TimeUnit.SECONDS);
}
}
使用RateLimiterFactory實現(xiàn)對接口的限制:
@Controller
public class TestController {
...
@RequestMapping("/test")
@ResponseBody
public String test(){
if(!RateLimiterFactory.tryAcquire(ApiInfo.TEST)) {
return "當前請求數(shù)過高!";
}
...
}
}
以上就是RateLimiter實現(xiàn)接口限流的常見使用,頭一次發(fā)文,mark一下。
作者:墮落門徒
總結
以上是生活随笔為你收集整理的java guava限流,Guava的RateLimiter实现接口限流的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 21-5-22校赛J 下围棋
- 下一篇: SDOI 2009 ED