关于gvava限流器
常用的限流算法有漏桶算法和令牌桶算法,guava的RateLimiter使用的是令牌桶算法,也就是以固定的频率向桶中放入令牌,例如一秒钟10枚令牌,实际业务在每次响应请求之前都从桶中获取令牌,只有取到令牌的请求才会被成功响应,获取的方式有两种:阻塞等待令牌或者取不到立即返回失拜
首先创建一个限流器,参数为:每秒生成两个令牌
RateLimiter rateLimiter = RateLimiter.create(2.0);
如果用户发来请求,首先判断一下用户是否获得令牌
if(rateLimiter.tryAcquire()){
log.info("获取到了令牌");
}else {
log.error("未获取到令牌");
}
获得令牌就可以执行相应的操作,通常用在秒杀等系统中