gpt4 book ai didi

java - 使用 Guava RateLimiter 类限制方法调用

转载 作者:搜寻专家 更新时间:2023-10-30 19:54:58 25 4
gpt4 key购买 nike

我正在尝试限制每秒对方法的调用次数。我尝试使用 Guava RateLimiter 来实现这一点。

RateLimiter rateLimiter = RateLimiter.create(1.0);//Max 1 call per sec
rateLimiter.acquire();
performOperation();//The method whose calls are to be throttled.

然而,调用的方法不限于每秒 1 次,而是连续的。

throttle 可以使用 Thread.sleep() 来实现,但我希望使用 Guava 而不是 sleep()。

我想知道使用 Guava RateLimiter 实现方法调用 trottling 的正确方法。我已经检查了 RateLimiter 的文档并尝试使用它但无法达到预期的结果。

最佳答案

您需要在每次调用时对同一个 RateLimiter 调用 acquire(),例如通过在 performOperation() 中提供它:

public class RateLimiterTest {
public static void main(String[] args) {
RateLimiter limiter = RateLimiter.create(1.0);
for (int i = 0; i < 10; i++) {
performOperation(limiter);
}
}

private static void performOperation(RateLimiter limiter) {
limiter.acquire();
System.out.println(new Date() + ": Beep");
}
}

结果

Fri Aug 07 19:00:10 BST 2015: Beep
Fri Aug 07 19:00:11 BST 2015: Beep
Fri Aug 07 19:00:12 BST 2015: Beep
Fri Aug 07 19:00:13 BST 2015: Beep
Fri Aug 07 19:00:14 BST 2015: Beep
Fri Aug 07 19:00:15 BST 2015: Beep
Fri Aug 07 19:00:16 BST 2015: Beep
Fri Aug 07 19:00:17 BST 2015: Beep
Fri Aug 07 19:00:18 BST 2015: Beep
Fri Aug 07 19:00:19 BST 2015: Beep

关于java - 使用 Guava RateLimiter 类限制方法调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31883739/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com