Skip to main content

RateLimiter

Trait RateLimiter 

Source
pub trait RateLimiter: Send + Sync {
    // Required methods
    fn acquire(&self, key: &str) -> Result<RateLimitResult, RateLimitError>;
    fn reset(&self, key: &str) -> Result<(), RateLimitError>;

    // Provided method
    fn try_acquire(&self, key: &str) -> Result<RateLimitResult, RateLimitError> { ... }
}
Expand description

限流器抽象 trait

P1-4:核心层定义的限流器接口,消除对 sz-orm-limit 的反向依赖。

实现方需保证线程安全(Send + Sync),以便在连接池中作为 Arc<RwLock<Option<Arc<dyn RateLimiter>>>> 使用。

常见实现(位于 sz-orm-limit 扩展包):

  • SlidingWindowRateLimiter:滑动窗口
  • TokenBucketRateLimiter:令牌桶
  • FixedWindowRateLimiter:固定窗口
  • DistributedRateLimiter:分布式限流(基于 Redis 等共享存储)

Required Methods§

Source

fn acquire(&self, key: &str) -> Result<RateLimitResult, RateLimitError>

获取一个令牌(阻塞语义:可能等待)

返回 RateLimitResult 表示放行或拒绝,或 RateLimitError 表示内部错误。

Source

fn reset(&self, key: &str) -> Result<(), RateLimitError>

重置指定 key 的限流状态

Provided Methods§

Source

fn try_acquire(&self, key: &str) -> Result<RateLimitResult, RateLimitError>

尝试获取一个令牌(非阻塞语义:立即返回)

默认实现委托给 acquire;具体实现可覆盖以提供真正的非阻塞路径。

Dyn Compatibility§

This trait is dyn compatible.

In older versions of Rust, dyn compatibility was called "object safety".

Implementors§