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,测试代码:

    /**
     * @Auther: wangbao02
     * @Date: 2018/6/29 12:33
     * @Description:谷歌的guava限流工具
     */
    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,执行结果

  • 相关阅读:
    tomcat7控制台日志中文乱码
    zookeeper的使用demo(c#/java)
    【备忘】mybatis的条件判断用<choose>
    不忘初心,方得始终。内存数据刷新改造小记
    又见thrift异常之TApplicationException: Internal error processing..
    Linux Shell计划任务
    Linux Shell 信号
    Linux Shell自定义函数
    Linux Shell Break和Continue
    Linux Shell while循环和until循环
  • 原文地址:https://www.cnblogs.com/webwangbao/p/9242903.html
Copyright © 2011-2022 走看看