在N秒内对M个请求进行节流方法调用

我需要一个组件/类,该组件/类可在N秒内将某些方法的执行限制为最多M个调用(或ms或nanos,无所谓)。

换句话说,我需要确保我的方法在N秒的滑动窗口中执行不超过M次。

如果您不知道现有的课程,请随时发布解决方案/想法,以了解如何实现。


慕的地8271018
浏览 407回答 3
3回答

噜噜哒

我将使用固定大小为M的时间戳环形缓冲区。每次调用该方法时,您都要检查最旧的条目,如果过去不到N秒,则执行并添加另一个条目,否则就睡觉对于时差。

千巷猫影

开箱即用的是Google Guava RateLimiter。// Allow one request per secondprivate RateLimiter throttle = RateLimiter.create(1.0);private void someMethod() {    throttle.acquire();    // Do something}

largeQ

具体来说,您应该可以使用来实现DelayQueue。使用M Delayed实例初始化延迟为零的实例来初始化队列。当对方法的请求进入时,take令牌将导致方法阻塞,直到满足限制要求为止。取得令牌后,add新令牌以延迟进入队列N。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java