java - Guava Rate Limiter 每分钟而不是秒?

标签 java guava rate-limiting

我正在尝试限制用户可以使用我的 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/

相关文章:

java - GWT 序列化 TreeMap 的排序/比较器

c# - AspNetCoreRateLimit 匹配规则时不使用查询参数

ruby - 限制 ruby​​ 文件流的速率

java - 在Java中模拟点击JavaScript函数

java - 使用相对布局和按钮将一个 videoView 覆盖在另一个 videoView 上

java - 树形结构游标API

caching - 当值为空时如何避免缓存?

amazon-web-services - AWS WAF 如何将 IP 路径的速率限制为低于 2000 个请求/分钟

java - 如何从 Hibernate Query 中获取 Map 对象

java - 如何反序列化包含不同类型对象的json数组