public class TokenBucketRateLimiter extends SemaphoreRateLimiter implements Closeable
令牌发放:通过scheduler定时器,定时向令牌桶中添加令牌,直到令牌桶满。
令牌发放周期为RateLimiterConfig.getRefreshPeriod()
,周期内发放个数为RateLimiterConfig.getMaxReleaseCount()
令牌请求:通过SemaphoreRateLimiter.tryAcquire(int)
方法请求令牌,如果令牌桶中数量不足,则返回false,表示请求失败。
Modifier and Type | Field and Description |
---|---|
protected ScheduledExecutorService |
scheduler |
config, semaphore
Constructor and Description |
---|
TokenBucketRateLimiter(RateLimiterConfig config)
构造
|
Modifier and Type | Method and Description |
---|---|
void |
close() |
void |
refreshLimit()
刷新限制,用户可重写此方法,改变填充许可方式,如:
填满窗口,一般用于固定窗口(Fixed Window)
固定频率填充,如每个周期只填充1个,配合
RateLimiterConfig.getRefreshPeriod() ,可实现令牌桶(Token Bucket)
同样,用户可通过调用此方法手动刷新注意:重写此方法前需判断许可是否已满 |
acquire, tryAcquire
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
acquire, tryAcquire
protected final ScheduledExecutorService scheduler
public TokenBucketRateLimiter(RateLimiterConfig config)
config
- 配置public void refreshLimit()
SemaphoreRateLimiter
RateLimiterConfig.getRefreshPeriod()
,可实现令牌桶(Token Bucket)refreshLimit
in class SemaphoreRateLimiter
RateLimiterConfig.getCapacity()
public void close()
close
in interface Closeable
close
in interface AutoCloseable
Copyright © 2025. All rights reserved.