日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

java guava限流,Guava的RateLimiter实现接口限流

發布時間:2025/3/12 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java guava限流,Guava的RateLimiter实现接口限流 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

最近開發需求中有需要對后臺接口進行限流處理,整理了一下基本使用方法。

首先添加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<>();

//每秒許可證數量

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實現對接口的限制:

@Controller

public class TestController {

...

@RequestMapping("/test")

@ResponseBody

public String test(){

if(!RateLimiterFactory.tryAcquire(ApiInfo.TEST)) {

return "當前請求數過高!";

}

...

}

}

以上就是RateLimiter實現接口限流的常見使用,頭一次發文,mark一下。

作者:墮落門徒

總結

以上是生活随笔為你收集整理的java guava限流,Guava的RateLimiter实现接口限流的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。