zoukankan      html  css  js  c++  java
  • Guava RateLimiter限流问题

    问题1:单机限流

    问题2:限流非公平

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

  • 相关阅读:
    go语言入门(三)
    go语言入门(二)
    Nand Flash 基础
    哈希技术
    NorFlash基础
    二阶构造模式
    C++基础知识汇总
    Arm寄存器介绍及汇编基础
    Linux Makefile详解
    Linux链接器脚本详解
  • 原文地址:https://www.cnblogs.com/-beyond/p/12287219.html
Copyright © 2011-2022 走看看