Throttling method calls using Guava RateLimiter class

后端 未结 1 652
悲哀的现实
悲哀的现实 2020-12-15 07:09

I am trying to throttle the number of calls to a method per second. I tried to achieve this using Guava RateLimiter.

RateLimiter rateLimiter = RateLimiter.cr         


        
相关标签:
1条回答
  • 2020-12-15 08:06

    You need to call acquire() on the same RateLimiter in every invocation, e.g. by making it available in 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");
        }
    }
    

    results in

    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

    0 讨论(0)
提交回复
热议问题