uw.task.util.LocalRateLimiter Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of uw-task Show documentation
Show all versions of uw-task Show documentation
uw-task包是一个分布式任务框架,通过uw-task可以快速构建基于docker的分布式任务体系,同时支持基于influx的任务运维监控。
The newest version!
package uw.task.util;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.TimeUnit;
import org.springframework.stereotype.Component;
import com.google.common.util.concurrent.RateLimiter;
/**
* 基于guava RateLimiter实现的限速器。
*
* @author axeon
*
*/
@Component
public class LocalRateLimiter {
private ConcurrentHashMap map = new ConcurrentHashMap<>();
/**
* 尝试获得限制允许状态。
*
* @param name
* @return
*/
public boolean tryAcquire(String name,long timeout,TimeUnit unit) {
RateLimiter limiter = map.get(name);
if (limiter != null) {
return limiter.tryAcquire();
} else {
return true;
}
}
/**
* 初始化一个流量限速器。
*
* @param name
* 限速器名称,应是全局唯一的名称
* @param limitRate
* 限速速率
* @param limitTimeSecond
* 限速时间数值
* @return 如果已经存在,则返回false,不再创建。
*/
public boolean initLimiter(String name, long limitRate, long limitTimeSecond) {
RateLimiter limiter = map.get(name);
double rate = Math.ceil((double) limitRate / (double) limitTimeSecond);
if (rate == 0.0d)
rate = 1.0d;
if (limiter == null) {
limiter = RateLimiter.create(rate);
map.put(name, limiter);
return true;
} else {
if (limiter.getRate() != rate) {
limiter.setRate(rate);
return true;
} else {
return false;
}
}
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy