首页 > 编程语言 > 详细

自己实现多限流器限流算法

时间:2021-07-02 15:02:27      阅读:12      评论:0      收藏:0      [点我收藏+]

漏斗限流

缺点:通过流量恒定 无法应对流量波动 如qps1000 , 800,1200 , 800 限流结果 800,1000, 800

令牌限流

每秒生产1000令牌 将上一秒剩余 令牌解决了流量波动 .需要限制令牌最大数 qps1000 800,1200,8000 结果 800,1200,800

package me.ele.marketing.budget.processor.helper;

import com.google.common.cache.Cache;
import com.google.common.cache.CacheBuilder;
import com.google.common.util.concurrent.RateLimiter;

import java.util.concurrent.ExecutionException;
import java.util.concurrent.TimeUnit;

/**
 * 2021/7/2 1:10 下午
 */
public class Limiter {
    private static Cache<String, RateLimiter> cache = CacheBuilder.newBuilder().maximumSize(1000).expireAfterAccess(1, TimeUnit.MINUTES).build();

    private static int default_limit = 5;
    
    static {
        default_limit = Integer.parseInt(System.getProperty("limit","5"));
    }

    public static boolean isLimit(String key) {
        RateLimiter rateLimiter = null;
        try {
            rateLimiter = cache.get(key,()->{
                return RateLimiter.create(default_limit);
            });
        } catch (ExecutionException e) {
            //log
        }
        if (rateLimiter.tryAcquire(1000,TimeUnit.MILLISECONDS)) {
            return false;
        }
        return true;
    }
}

自己实现多限流器限流算法

原文:https://www.cnblogs.com/albertXe/p/14962873.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!