Class TokenBucketRateLimiter

java.lang.Object
tech.riemann.nif.web.ratelimit.TokenBucketRateLimiter
All Implemented Interfaces:
RateLimiter

public class TokenBucketRateLimiter extends Object implements RateLimiter
令牌桶限流器

核心思想: 1. 系统以恒定速率生成令牌 2. 请求需要获取令牌才能执行 3. 桶满时丢弃新令牌 4. 允许一定程度的突发流量

适用场景:API接口限流,允许短时间内的突发请求

Author:
Kerbores(kerbores@riemann.tech)
  • Constructor Details

    • TokenBucketRateLimiter

      public TokenBucketRateLimiter()
    • TokenBucketRateLimiter

      public TokenBucketRateLimiter(int maxKeys)
  • Method Details

    • tryAcquire

      public boolean tryAcquire(String key, double permitsPerSecond)
      Description copied from interface: RateLimiter
      尝试获取许可(默认1秒窗口)
      Specified by:
      tryAcquire in interface RateLimiter
      Parameters:
      key - 限流key
      permitsPerSecond - 每秒允许的请求数
      Returns:
      是否获取成功
    • tryAcquire

      public boolean tryAcquire(String key, int permits, long windowSizeMs)
      Description copied from interface: RateLimiter
      尝试获取许可(自定义时间窗口)
      Specified by:
      tryAcquire in interface RateLimiter
      Parameters:
      key - 限流key
      permits - 时间窗口内允许的请求数
      windowSizeMs - 时间窗口大小(毫秒)
      Returns:
      是否获取成功
    • getAlgorithm

      public RateLimitAlgorithm getAlgorithm()
      Description copied from interface: RateLimiter
      获取支持的限流算法
      Specified by:
      getAlgorithm in interface RateLimiter
      Returns:
      限流算法