private final RateLimiter rateLimiter = RateLimiter.create(5.0)
时间: 2024-12-27 13:27:42 浏览: 15
### 创建和使用 Guava RateLimiter 进行速率限制
Guava 的 `RateLimiter` 是一种用于控制应用程序访问资源的速度工具。通过这种方式可以防止系统过载并确保公平分配资源。
#### 导入依赖项
为了使用 Guava 库中的 `RateLimiter`,首先需要引入相应的 Maven 或 Gradle 依赖:
对于 Maven 用户来说,可以在项目的 pom.xml 文件中加入如下配置:
```xml
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>31.0.1-jre</version>
</dependency>
```
而对于采用 Gradle 构建系统的开发者,则应在 build.gradle 中添加这一行:
```groovy
implementation 'com.google.guava:guava:31.0.1-jre'
```
#### 初始化 RateLimiter 实例
下面展示了一个简单的例子来说明如何创建每秒允许一次请求的限流器实例:
```java
import com.google.common.util.concurrent.RateLimiter;
public class RateLimitExample {
private static final RateLimiter rateLimiter = RateLimiter.create(1.0); // 每秒钟最多处理1次请求
public void accessResource() throws InterruptedException {
while (true) {
double waitTimeSecs = rateLimiter.acquire(); // 获取许可前等待的时间(单位:秒)
System.out.println("Accessing resource after waiting " + String.format("%.2f", waitTimeSecs) + " seconds.");
Thread.sleep((long)(waitTimeSecs * 1000)); // 模拟业务逻辑耗时操作
if (!rateLimiter.tryAcquire()) { // 尝试获取许可而不阻塞线程执行
System.out.println("Too many requests! Please try again later.");
} else {
performOperation();
}
}
}
private void performOperation(){
// 执行具体的操作...
}
}
```
在这个案例里,当调用者尝试访问受保护的方法时,会先检查是否有足够的配额可用;如果没有的话就会被拒绝服务直到下一时段到来为止[^2]。
阅读全文