zoukankan      html  css  js  c++  java
  • guava的限流工具RateLimiter使用

    guava限流工具使用

    非常详细的一篇使用博客:https://www.cnblogs.com/yeyinfu/p/7316972.html

    1,原理:Guava RateLimiter基于令牌桶算法,我们只需要告诉RateLimiter系统限制的QPS是多少,那么RateLimiter将以这个速度往桶里面放入令牌,然后请求的时候,通过tryAcquire()方法向RateLimiter获取许可(令牌)。

    2,测试代码:

    public class GuavaRateLimiter {
     
        public static ConcurrentHashMap<String, RateLimiter> resourceRateLimiter = new ConcurrentHashMap<String, RateLimiter>();
     
        //初始化限流工具RateLimiter
        static {
            createResourceRateLimiter("order", 50);
        }
     
        public static void createResourceRateLimiter(String resource, double qps) {
            if (resourceRateLimiter.contains(resource)) {
                resourceRateLimiter.get(resource).setRate(qps);
            } else {
                //创建限流工具,每秒发出50个令牌指令
                RateLimiter rateLimiter = RateLimiter.create(qps);
                resourceRateLimiter.putIfAbsent(resource, rateLimiter);
     
            }
     
        }
     
        public static void main(String[] args) {
            for (int i = 0; i < 5000; i++) {
                new Thread(new Runnable() {
                    @Override
                    public void run() {
                        //如果获得令牌指令,则执行业务逻辑
                        if (resourceRateLimiter.get("order").tryAcquire(10, TimeUnit.MICROSECONDS)) {
                            System.out.println("执行业务逻辑");
                        } else {
                            System.out.println("限流");
                        }
                    }
                }).start();
            }
     
        }
    }
       

    3,执行结果

  • 相关阅读:
    过滤'and','or' ''' '*' '=' ‘select’下的注入
    HBase 官方文档0.90.4
    MapReduce原理及操作
    HDFS原理及操作
    Sqoop介绍、安装与操作
    HBase介绍、安装与应用案例
    Mahout介绍、安装与应用案例
    Hive介绍和安装部署
    MapReduce应用案例
    Flume介绍与安装
  • 原文地址:https://www.cnblogs.com/leeego-123/p/11492822.html
Copyright © 2011-2022 走看看