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

如何用Rust Governor创建10秒10次请求的限流器?

在Rust中用Governor实现10秒内允许10次请求的限流器

你之前写的代码用了Quota::with_period,这是令牌桶模式的配置——每10秒恢复1个令牌,初始burst设为10意味着一开始有10个令牌,但用完之后每10秒才能再用1次,这确实不是你想要的“每10秒完全重置配额”的效果。

其实Governor本身支持固定窗口限流,完全可以实现你要的需求,不需要每隔10秒替换RateLimiter。正确的做法是用Quota::per_duration来创建配额:

use governor::{Quota, RateLimiter};
use std::time::Duration;
use std::num::NonZeroU32;

// 创建每10秒允许10次请求的固定窗口配额
let quota = Quota::per_duration(
    Duration::from_secs(10),
    NonZeroU32::new(10).unwrap()
).unwrap();

// 初始化限流器
let limiter = RateLimiter::direct(quota);

这个配置的逻辑是:

  • 以10秒为一个固定窗口,每个窗口内最多允许10次请求
  • 当窗口时间结束后,配额会自动重置为10次,不需要手动重建限流器

简单来说,per_duration就是专门用来定义“每X时间允许Y次请求”的固定窗口策略,而with_period是用于令牌桶的“每X时间恢复1个令牌”的平滑限流策略,选对方法就不用折腾替换限流器了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 13:02:13