问题描述
我正在尝试限制用户可以使用我的REST API创建的帐户数量。
I'm trying to rate-limit the the number of accounts a user can create with my REST API.
我本来希望使用Guava的 RateLimiter
只允许IP在10分钟内创建5个帐户,但 RateLimiter.create
方法只需要 double
指定许可数每秒。
I would have liked to use Guava's RateLimiter
to only allow an IP to create, let's say, 5 accounts within 10 minutes, but the RateLimiter.create
method only takes a double
specifying the number of permits "per second".
有没有办法配置RateLimiter以释放许可证粒度大于一秒?
Is there a way to configure RateLimiter to release permits at a granularity greater than one second?
推荐答案
从 RateLimiter.create
javadoc:
所以你可以设置 permitsPerSecond
小于 1.0
每秒发布许可证的次数少于每秒一次。
So you can set permitsPerSecond
to less than 1.0
to release a permit less often than once per second.
在您的具体情况下,五个帐户十分钟内的s简化为每两分钟一个帐户,即每120秒一个帐户。您将 1.0 / 120
传递给 permitsPerSecond
。
In your specific case, five accounts in ten minutes simplifies to one account per two minutes, which is one account per 120 seconds. You'd pass 1.0/120
for permitsPerSecond
.
在您的用例中,您可能希望适应帐户创建的突发请求。 RateLimiter
规范似乎没有定义未使用的许可证会发生什么,但默认实现 SmoothRateLimiter
似乎允许许可累积到最大值以满足爆发。这个类不公开,所以没有javadoc文档,但来源有一个冗长的评论,详细讨论了当前的行为。
In your use case you probably want to accommodate bursty requests for account creations. The RateLimiter
specification doesn't seem to define what happens to unused permits, but the default implementation, SmoothRateLimiter
, seems to let permits accrue up to some maximum to satisfy bursts. This class is not public, so there's no javadoc documentation, but the SmoothRateLimiter
source has a lengthy comment with a detailed discussion of the current behavior.
这篇关于番石榴的RateLimiter每分钟而不是秒?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!