我试图限制用户可以使用我的REST API创建的帐户数量。
我本来希望使用Guava的RateLimiter
仅允许IP在10分钟内创建5个帐户,但是RateLimiter.create
方法仅采用double
指定“每秒”的许可数量。
是否可以将RateLimiter配置为以大于一秒的粒度释放许可证?
最佳答案
从RateLimiter.create
javadoc:
因此,您可以将permitsPerSecond
设置为小于1.0
,以使释放许可证的频率少于每秒一次。
在您的特定情况下,十分钟内五个帐户可简化为每两分钟一个帐户,即每120秒一个帐户。您需要将1.0/120
传递给permitsPerSecond
。
在您的用例中,您可能希望容纳对帐户创建的突发请求。 RateLimiter
规范似乎并未定义未使用的许可所发生的情况,但是默认实现SmoothRateLimiter
似乎允许许可证累积达到某个最大值以满足突发情况。此类不是公共(public)的,因此没有javadoc文档,但是 SmoothRateLimiter
源代码中有一个冗长的注释,其中详细讨论了当前行为。