All Downloads are FREE. Search and download functionalities are using the official Maven repository.

uw.task.util.LocalRateLimiter Maven / Gradle / Ivy

Go to download

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