我有一个用例,我需要调用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
暂无答案!
目前还没有任何答案,快来回答吧!