基本使用
RateLimiter
通过 RateLimiter.create(double permitsPerSecond)
方法创建,其中 permitsPerSecond
表示每秒允许的令牌数量。例如,创建一个每秒允许 2 个请求的 RateLimiter
:
RateLimiter rateLimiter = RateLimiter.create(2.0);
rateLimiter.acquire(); // 阻塞等待获取令牌
rateLimiter.acquire(3); // 获取3个令牌
if (rateLimiter.tryAcquire(2, TimeUnit.SECONDS)) {
// 在2秒内获取到令牌,执行操作
} else {
// 超时未获取到令牌,执行其他逻辑
}
RateLimiter warmingUpLimiter = RateLimiter.create(5.0, 10, TimeUnit.SECONDS);
RateLimiter
常用于控制网络请求、数据库操作等的频率,防止系统过载。例如,在 Web 服务中限制接口调用频率:
RateLimiter rateLimiter = RateLimiter.create(1.0); // 每秒1个请求
public void handleRequest(int requestId) {
if (rateLimiter.tryAcquire()) {
System.out.println("处理请求: " + requestId);
// 处理请求
} else {
System.out.println("请求 " + requestId + " 被限流");
}
}