bucket4j使用实例


本文主要演示一下bucket4j的几个使用实例
maven
<dependency>
<groupId>com.github.vladimir-bukhtoyarov</groupId>
<artifactId>bucket4j-core</artifactId>
<version>4.0.1</version>
</dependency>
rate limit
@Test
public void testRateLimit(){
// define the limit 1 time per 10 minute
Bandwidth limit = Bandwidth.simple(1, Duration.ofMinutes(10));
// construct the bucket
Bucket bucket = Bucket4j.builder().addLimit(limit).build();
IntStream.rangeClosed(1,5)
.forEach(i -> {
executor.submit(() -> {
if(bucket.tryConsume(1)){
LOGGER.info(“acquired”);
}else{
LOGGER.info(“blocked”);
}
});
});
}
这里使用simple方法构造Bandwidth,进而构建bucket实例
scheduler
@Test
public void testAsScheduler(){
// define the limit 100 times per 1 minute
Bandwidth limit = Bandwidth.simple(5, Duration.ofMinutes(1));
// construct the bucket
Bucket bucket = Bucket4j.builder().addLimit(limit).build();

// do polling in infinite loop
while (true) {
// Consume a token from the token bucket.
// If a token is not available this method will block until the refill adds one to the bucket.
try {
bucket.asScheduler().consume(1);
} catch (InterruptedException e) {
e.printStackTrace();
}
LOGGER.info(“do remote call”);
}
}
输出实例
23:14:46.740 [main] INFO com.example.demo.Bucket4jTest – do remote call
23:14:46.744 [main] INFO com.example.demo.Bucket4jTest – do remote call
23:14:46.744 [main] INFO com.example.demo.Bucket4jTest – do remote call
23:14:46.744 [main] INFO com.example.demo.Bucket4jTest – do remote call
23:14:46.744 [main] INFO com.example.demo.Bucket4jTest – do remote call
23:14:58.749 [main] INFO com.example.demo.Bucket4jTest – do remote call
23:15:10.749 [main] INFO com.example.demo.Bucket4jTest – do remote call
23:15:22.754 [main] INFO com.example.demo.Bucket4jTest – do remote call
23:15:34.757 [main] INFO com.example.demo.Bucket4jTest – do remote call
23:15:46.759 [main] INFO com.example.demo.Bucket4jTest – do remote call
23:15:58.762 [main] INFO com.example.demo.Bucket4jTest – do remote call
23:16:10.765 [main] INFO com.example.demo.Bucket4jTest – do remote call
前面5个token消耗完之后,后续每隔12秒消耗一个token
小结
bucket4j类库是一款优秀的java限流类库,可以用来限流,也可以用作简单调度。
doc
Basic usage examples

【腾讯云】轻量 2核2G4M,首年65元

阿里云限时活动-云数据库 RDS MySQL  1核2G配置 1.88/月 速抢

本文由乐趣区整理发布,转载请注明出处,谢谢。

您可能还喜欢...

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据