我需要一个组件/类,该组件/类可在N秒内将某些方法的执行限制为最多M个调用(或ms或nanos,无所谓)。换句话说,我需要确保我的方法在N秒的滑动窗口中执行不超过M次。如果您不知道现有的课程,请随时发布解决方案/想法,以了解如何实现。
3 回答

千巷猫影
TA贡献1829条经验 获得超7个赞
开箱即用的是Google Guava RateLimiter。
// Allow one request per second
private RateLimiter throttle = RateLimiter.create(1.0);
private void someMethod() {
throttle.acquire();
// Do something
}

largeQ
TA贡献2039条经验 获得超7个赞
具体来说,您应该可以使用来实现DelayQueue。使用M Delayed实例初始化延迟为零的实例来初始化队列。当对方法的请求进入时,take令牌将导致方法阻塞,直到满足限制要求为止。取得令牌后,add新令牌以延迟进入队列N。
添加回答
举报
0/150
提交
取消