Guava RateLimiter 单体应用限流
丢弃行为限流
@Slf4j
public class GuavaRateLimiterExample {
// 每秒令牌数
static double permitsPerSecond = 5;
static RateLimiter rateLimiter = RateLimiter.create(permitsPerSecond);
public static void main(String[] args) throws InterruptedException {
for (int i = 0; i < 100; i++) {
Thread.sleep(100);
if (rateLimiter.tryAcquire()) {
//等待时间要多余令牌生成时间,否则等不到令牌
// if (rateLimiter.tryAcquire(210, TimeUnit.MILLISECONDS)) {//等到示例
// if (rateLimiter.tryAcquire(150, TimeUnit.MILLISECONDS)) {//等不到示例
handle(i);
}
}
}
private static void handle(int i) {
log.info("index - {}", i);
}
}

阻塞行为限流
@Slf4j
public class GuavaRateLimiterExample2 {
// 每秒令牌数
static double permitsPerSecond = 5;
static RateLimiter rateLimiter = RateLimiter.create(permitsPerSecond);
public static void main(String[] args) throws InterruptedException {
for (int i = 0; i < 100; i++) {
Thread.sleep(100);
rateLimiter.acquire(5); // 默认拿1个令牌: 拿到5个令牌才去处理
handle(i);
}
}
private static void handle(int i) {
log.info("index - {}", i);
}
}
