引入maven 依赖:
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>25.1-jre</version>
</dependency>
java模拟代码:
public static void main(String[] args) throws ExecutionException, InterruptedException {
//每秒最多允许93次请求
RateLimiter rateLimiter = RateLimiter.create(93);
CountDownLatch latch = new CountDownLatch(1);
//构建100个调用,同时发出
for (int i = 0; i < 105; i++) {
new Thread(new Runnable() {
@Override
public void run() {
try {
//预备
latch.await();
//检查频率
// Preconditions.checkState(rateLimiter.acquire(), "令牌不足则等待");
Preconditions.checkState(rateLimiter.tryAcquire(), "令牌不足则立即返回");
//频率检查通过,执行业务代码
System.out.println("业务执行中...");
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}).start();
}
System.out.println("wait...");
Thread.sleep(5000);
//go!
latch.countDown();
}