使用 Guava RateLimiter 限制方法调用 class
Throttling method calls using Guava RateLimiter class
我正在尝试限制每秒调用方法的次数。
我尝试使用 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个,而是连续的。
节流可以使用 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
我正在尝试限制每秒调用方法的次数。 我尝试使用 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个,而是连续的。
节流可以使用 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