问题背景
有一个需求, 需要进行限流, 选择使用的 Guava RateLimiter, 但是发现在限流方面, 还是存在一些问题 (单机), 特别是当瞬时访问量特别大的时候,
请看下面一个代码, 应该输出什么结果?
- package cn.ganlixin.guava;
- import com.google.common.util.concurrent.RateLimiter;
- import org.junit.Test;
- import java.time.LocalTime;
- public class UserRateLimiter {
- @Test
- public void testSimple() {
- // 创建一个限流器 (每秒限制流量为 5 个)
- RateLimiter rateLimiter = RateLimiter.create(5.0);
- for (int i = 0; i < 10; i++) {
- if (rateLimiter.tryAcquire()) {
- System.out.println(LocalTime.now() + "通过");
- } else {
- System.out.println(LocalTime.now() + "被限流");
- }
- }
- }
- }
运行上面的代码, 输出结果如下:
15:05:37.655 通过
15:05:37.655 被限流
15:05:37.655 被限流
15:05:37.656 被限流
15:05:37.656 被限流
15:05:37.656 被限流
15:05:37.656 被限流
15:05:37.656 被限流
15:05:37.656 被限流
15:05:37.656 被限流
可以看到, 上面的运行输出中, 只有 1 个请求通过没有被限流, 其余 9 个都被限流了.
这和我预期的结果有出入, 预期应该是有 5 个通过, 5 个被限流.
来源: http://www.bubuko.com/infodetail-3413085.html