guavaratelimter vs executorservice用于速率限制3p api调用

ht4b089n  于 2021-07-03  发布在  Java
关注(0)|答案(0)|浏览(196)

我有一个用例,我需要调用3p服务,如每小时1000请求流量协议
我有两个解决办法
瓜瓦拉蒂利姆特

hashmap<String,RateLimiter> rateWebsiteMap = new HashMap<>();
rateWebsiteMap.add(amazon:10Request)
rateWebsiteMap.add(google:20Request)
while(true){
    for (Map.Entry<String, String> entry : map.entrySet()) {
        website = entry.getKey()
        rateLimit = entry.getValue()
        if(ratelimter.tryAcquire()){
            triggercall(website)
        }
    }
}

或使用scheduledexecutorservice

ScheduledExecutorService es = new ScheduledThreadPoolExecutor(100);
   Future<Object1> =  es.scheduleAtFixedRate(() -> {
            triggercall(websiteAmazon);
    }, 0, 1000, TimeUnit.MILLISECONDS);

   hashmap<String,Future<Object1>> FutureWebsiteMap = new HashMap<>();
   FutureWebsiteMap.add(amazon:AmazonFuture) //If i want to cancel that thread

据我所知,我收到的评论不一,像一些帖子建议使用GuavaRateLimitor内无限,而循环睡眠时间。一些建议使用scheduledexecutorservice的帖子/博客。
我如何衡量两者的表现。哪一个最适合我的用例。我有一个要求,改变交通时,它是必要的。这就是为什么在Map中存储未来,以便我可以取消和重新安排新的计时器。
哪种方法使用更少的cpu/内存
我正在使用java-11

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题