使用番石榴速率限制器类的限制方法调用

2022-09-03 12:22:42

我正在尝试限制每秒对方法的调用次数。我试图使用番石榴率限制器来实现这一目标。

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()来实现,但我希望使用番石榴而不是sleep()。

我想知道使用番石榴速率限制器实现方法调用小跑的正确方法。我已经检查了RateLimiter的文档,并尝试使用相同的文档,但无法达到预期的结果。


答案 1

您需要在每次调用中调用相同的内容,例如,通过在 以下列方式中提供它:acquire()RateLimiterperformOperation()

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");
    }
}

结果

星期五 8 月 07 19:00:10 BST 2015: 哔哔
星期五 8 月 07 19:00:11 BST 2015: 哔哔
星期五 8 月 07 19:00:12 BST 2015: 哔哔
星期五 8 月 07 19:00:13 BST 2015: 哔哔
星期五 8 月 07 19:00:14 BST 2015: 哔哔
星期五 07 19:00:15 BST 2015: 哔哔
周五 8 月 07 19:00:16 BST 2015: 哔哔
声 星期五 2015: 哔哔星期五 2015 年 8 月 7 日 19:00:18 BST 2015: 哔哔声 星期五 2015: 哔哔声 星期五 2015 年 8 月 7 日 19:00:18 BST 2015: 哔哔声 星期五 2015: 哔哔声 星期五 2015: 哔哔声 星期五 2015 年 8 月 7 日 19:00:17 BST 2015: 哔哔声 星期五 2015: 哔哔声 星期五 2015 年 8 月 7 日 19:00:17 BST 2015: 哔哔声 星期五 2015 年 8 月 7 日 19:00:18 BST 2015: 哔哔声 星期五 2015 年 8 月 7 日 19:00:18 BST 2015: 哔哔声 星期五 2015 年 8 月 7 日 19:00:17 BST 2015: 哔哔声 星期五 2015 年 8 月 7 日 19:00:17 BST 2015: 哔哔声 星期五 2015 年 8 月 7 日 19:00:17 BST 2015: 哔哔声 星期五 2015 年 8 月 7 日 19:00:18 BST 2015: 哔哔声 星期五 2015 年 8 月 07 日 19:00:17 BST 2015: 哔哔声 星期五 2015 年 8 月 7 日 19:00:17 BST 2015: 哔哔
声 星期五 2015 年 8 哔哔声
星期五 8月07 19:00:19 BST 2015: 哔哔声


答案 2

推荐