标签:RateLimiter create acquire packet RateLimit GUAVA void rateLimiter
RateLimit目前这个工具类还在@Bate阶段,在官方wiki文档中,还找不到;
1.当我们使用rateLimiter,我们能够实现什么?
RateLimiter rl = RateLimiter.create(double permitsPerSecod);
通过如上的方法我们可以知道,RateLimiter可以设定一个访问速率,单位是 “秒”,这就有点类似QPS;能不能够限制并发量呢,答案是不能的;因为在RateLimiter里面只有acquire, tryAcquire,并没有release方法;而且注释里也说明了,permit一旦acquire之后,不需要release;
2.rateLimiter要如何使用?
final RateLimiter rateLimiter = RateLimiter.create(2.0); // rate is "2 permits per second"
void submitTasks(List<Runnable> tasks, Executor executor) {
for (Runnable task : tasks) {
rateLimiter.acquire(); // may wait
executor.execute(task);
}
}
final RateLimiter rateLimiter = RateLimiter.create(5000.0); // rate = 5000 permits per second
void submitPacket(byte[] packet) {
rateLimiter.acquire(packet.length);
networkService.send(packet);
}
3.使用RateLimiter有说明要注意的
单词acquire的数字是可以大于设定的每秒请求数的,这不会对档次acquire有任何影响,但是这会直接影响后续的acquire;
public static void main(String[] args) {
RateLimiter rl = RateLimiter.create(2);
for (int i = 0; i < 1000; i++) {
rl.acquire(10);
System.out.println(System.currentTimeMillis());
}
}
//输出
1601265168661
1601265173661
1601265178661
1601265183662
可以看到每次都是间隔5秒,才会执行下一次工作
标签:RateLimiter,create,acquire,packet,RateLimit,GUAVA,void,rateLimiter 来源: https://www.cnblogs.com/IC1101/p/13744042.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。