• java

  • 首页

  • 文章归档

  • 默认分类

  • 关于页面
W E L C O M E
W E L C O M E

A股让人很难再爱

音乐是各个时间段各种心情下的随机收藏,所以风格各异

03月
28
学习

关于guava的限流器RateLimiter

发表于 2022-03-28 • 字数统计 1018 • 被 817 人看爆

依赖

一不一定时用这个依赖,谷歌其他的工具有的也会引用guava。

<dependency>
  <groupId>com.google.guava</groupId>
  <artifactId>guava</artifactId>
  <version>31.1-jre</version>
  <type>bundle</type>
</dependency>

实现原理

实际上是使用了令牌桶算法,通过设定每秒中生成的令牌个数,达到用户需要的控制效果。

简单用法

RateLimiter limiter = RateLimiter.create(10.0); //这里是每秒创建十个

这就完成了创建,参数rate指每秒创建几个令牌,使用时通过一下几个函数去获取令牌。

acquire(int permits);
tryAcquire(int permits);
tryAcquire(int permits,long timeout, TimeUnit timeUnit);

acquire(int permits)

这个是阻塞式的去获取,即线程会一直等待直到获取到令牌,该函数会返回一个等待时间的double值。
如图:
这里是每秒创建一个令牌,每次线程请求获取两个。
image.png
acquire();这个重载函数默认是获取一个令牌

tryAcquire(int permits)

这个是非阻塞式获取,即线程不会等待获取令牌,获取不到返回false,,获取成功返回true,这也是一般使用选择的手段,一般返回false时写一个fallback函数去处理。
image.png
tryAcquire(int permits,long timeout, TimeUnit timeUnit);
这个重载函数就是允许设置等待时间,知道等待时间达到才会返回成功失败Boolen值。

rateLimiter.setRate(int rate)

我觉得最灵活的还是这里,可以随时设置生成令牌的速率,这个就可以在流量监控中,根据实际情况动态的修改生成速率来控制流量,属于一种轻量的实现方式。

分享到:
使用Jgit操作git
Mysql索引学习
  • 文章目录
  • 站点概览
A股让人很难再爱

~ 沐白

别问,问就是点金

Github QQ Email RSS
最喜欢的游戏
最喜欢的音乐
最喜欢的图书
最喜欢的动漫
DOTA2 生存游戏....
周杰伦,林俊杰,薛之谦,and ....
无
海贼王,火影
看爆 Top5
  • springboot实现word转pdf(基于document4j) 3,577次看爆
  • 使用Jgit操作git 980次看爆
  • 关于guava的限流器RateLimiter 818次看爆
  • ubuntu安装roaringbitmap插件 722次看爆
  • Mysql索引学习 721次看爆

站点已萌萌哒运行 00 天 00 小时 00 分 00 秒(●'◡'●)ノ♥

Copyright © 2025 A股让人很难再爱 苏ICP备2021008439号-1

由 Halo 强力驱动 · Theme by Sagiri · 站点地图