我正在尝试限制用户可以使用我的 REST API 创建的帐户数量。
我本来想使用 Guava 的 RateLimiter
只允许一个 IP 在 10 分钟内创建,比方说,5 个帐户,但是 RateLimiter.create
方法只需要double
指定“每秒”的许可数。
有没有办法配置 RateLimiter 以大于一秒的粒度释放许可?
最佳答案
来自 RateLimiter.create
javadoc:
When the incoming request rate exceeds permitsPerSecond the rate limiter will release one permit every
(1.0 / permitsPerSecond)
seconds.
因此您可以将 permitsPerSecond
设置为小于 1.0
以低于每秒一次的频率释放许可。
在您的特定情况下,十分钟内五个帐户简化为每两分钟一个帐户,即每 120 秒一个帐户。对于 permitsPerSecond
,您将通过 1.0/120
。
在您的用例中,您可能希望满足突发的帐户创建请求。 RateLimiter
规范似乎没有定义未使用许可会发生什么情况,但默认实现 SmoothRateLimiter
似乎允许许可累积到某个最大值以满足突发。此类不是公开的,因此没有 javadoc 文档,但是 SmoothRateLimiter
source 有一个冗长的评论,详细讨论了当前的行为。
关于java - Guava Rate Limiter 每分钟而不是秒?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27711962/