zoukankan      html  css  js  c++  java
  • GUAVA-RateLimit

        RateLimit目前这个工具类还在@Bate阶段,在官方wiki文档中,还找不到;

    1.当我们使用rateLimiter,我们能够实现什么?

    RateLimiter rl = RateLimiter.create(double permitsPerSecod);
    

    通过如上的方法我们可以知道,RateLimiter可以设定一个访问速率,单位是 “秒”,这就有点类似QPS;能不能够限制并发量呢,答案是不能的;因为在RateLimiter里面只有acquire, tryAcquire,并没有release方法;而且注释里也说明了,permit一旦acquire之后,不需要release;

    2.rateLimiter要如何使用?

       final RateLimiter rateLimiter = RateLimiter.create(2.0); // rate is "2 permits per second"
       void submitTasks(List<Runnable> tasks, Executor executor) {
         for (Runnable task : tasks) {
           rateLimiter.acquire(); // may wait
           executor.execute(task);
         }
       }
    
       final RateLimiter rateLimiter = RateLimiter.create(5000.0); // rate = 5000 permits per second
       void submitPacket(byte[] packet) {
         rateLimiter.acquire(packet.length);
         networkService.send(packet);
       }
    

    3.使用RateLimiter有什么要注意的

        单词acquire的数字是可以大于设定的每秒请求数的,这不会对档次acquire有任何影响,但是这会直接影响后续的acquire;

        public static void main(String[] args) {
            RateLimiter rl = RateLimiter.create(2);
            for (int i = 0; i < 1000; i++) {
                rl.acquire(10);
                System.out.println(System.currentTimeMillis());
            }
        }
    
    //输出
    1601265168661
    1601265173661
    1601265178661
    1601265183662
    

        可以看到每次都是间隔5秒,才会执行下一次工作

    4.RateLimiter的原理

  • 相关阅读:
    微信小程序如何获取openid
    js经典试题之常用的方法
    js经典试题之运算符的优先级
    js如何使浏览器允许脚本异步加载
    es6从零学习(五):Module的语法
    es6从零学习(四):Class的继承
    js如何处理字符串中带有↵字符
    Zuul中聚合Swagger的坑
    阿里Sentinel支持Spring Cloud Gateway啦
    Spring Boot中的Mongodb多数据源扩展
  • 原文地址:https://www.cnblogs.com/IC1101/p/13744042.html
Copyright © 2011-2022 走看看