You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

计算Google Guava/resilience4j限流器速率值,适配100请求/分钟API限制

计算Guava/Resilience4j限流器速率的方案

核心逻辑

限流速率仅由API的限制规则(每分钟100次请求)决定,总请求量10000次是待处理的任务总量,仅用于预估总耗时(10000/100=100分钟),不影响限流参数的配置。


Google Guava RateLimiter 配置

Guava的RateLimiter以**每秒允许的请求数(permitsPerSecond)**为核心参数,计算公式:

permitsPerSecond = 每分钟请求数 / 60

代入已知值:100/60 ≈ 1.6667(次/秒)

代码示例

平滑突发限流(允许短时间内突发请求)

import com.google.common.util.concurrent.RateLimiter;

// 初始化限流器,每秒允许~1.6667个请求(对应每分钟100次)
RateLimiter rateLimiter = RateLimiter.create(100.0 / 60);

// 每次API请求前获取许可
if (rateLimiter.tryAcquire()) {
    // 执行API调用逻辑
}

平滑预热限流(适用于需要逐步提升速率的场景)

如果需要设置预热时间(比如10秒内逐步达到限流速率):

RateLimiter rateLimiter = RateLimiter.create(100.0 / 60, 10, TimeUnit.SECONDS);

Resilience4j RateLimiter 配置

Resilience4j限流器基于令牌桶机制,可通过两种方式配置匹配每分钟100次的规则:

方式1:按分钟周期配置(严格每分钟100次,无突发)

直接设置刷新周期为1分钟,周期内允许100次请求:

import io.github.resilience4j.ratelimiter.RateLimiter;
import io.github.resilience4j.ratelimiter.RateLimiterConfig;
import java.time.Duration;

RateLimiterConfig config = RateLimiterConfig.custom()
    .limitRefreshPeriod(Duration.ofMinutes(1))
    .limitForPeriod(100)
    .build();

RateLimiter rateLimiter = RateLimiter.of("api-limiter", config);

方式2:按秒平滑配置(允许均匀分布请求)

设置每秒填充令牌的速率为100/60 ≈ 1.6667个,令牌桶容量可根据是否允许突发调整:

import io.github.resilience4j.ratelimiter.RateLimiter;
import io.github.resilience4j.ratelimiter.RateLimiterConfig;
import io.github.resilience4j.ratelimiter.TokenBucketConfig;

RateLimiterConfig config = RateLimiterConfig.custom()
    .tokenBucketConfig(TokenBucketConfig.custom()
        .tokenRate(100.0 / 60) // 每秒填充~1.6667个令牌
        .capacity(100) // 桶容量,允许最多突发100次请求(若API支持)
        .build())
    .build();

RateLimiter rateLimiter = RateLimiter.of("api-limiter", config);

内容的提问来源于stack exchange,提问作者Jumbolemming

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.21 04:27:31