码迷,mamicode.com
首页 > 其他好文 > 详细

Guava RateLimiter限流问题

时间:2020-02-09 16:59:12      阅读:63      评论:0      收藏:0      [点我收藏+]

标签:存在   local   print   访问量   没有   import   oca   有一个   highlight   

问题背景

  有一个需求,需要进行限流,选择使用的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个被限流。

Guava RateLimiter限流问题

标签:存在   local   print   访问量   没有   import   oca   有一个   highlight   

原文地址:https://www.cnblogs.com/-beyond/p/12287219.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!