java guava限流,Guava的RateLimiter实现接口限流

最近开发需求中有需要对后台接口进行限流处理,整理了一下基本使用方法。

首先添加guava依赖:

com.google.guava

guava

23.0

然后封装RateLimiter适用对多接口的限制:

import com.google.common.util.concurrent.RateLimiter;

import org.springframework.util.StringUtils;

import java.util.concurrent.ConcurrentHashMap;

import java.util.concurrent.TimeUnit;

public class RateLimiterFactory {

private static ConcurrentHashMap limiterMap = new ConcurrentHashMap<>();

//每秒许可证数量

private static double permitsPerSecond = 1000;

//等待超时时间

private static long timeout = 4L;

/**

*@param apiId 对应接口的id

*@description 获取许可

*/

public static boolean tryAcquire(String apiId) {

//如果传入apiId为空则返回true

if (StringUtils.isEmpty(apiId)) {

return true;

}

limiterMap.putIfAbsent(apiId, RateLimiter.create(permitsPerSecond));

return limiterMap.get(apiId).tryAcquire(timeout, TimeUnit.SECONDS);

}

}

使用RateLimiterFactory实现对接口的限制:

@Controller

public class TestController {

...

@RequestMapping("/test")

@ResponseBody

public String test(){

if(!RateLimiterFactory.tryAcquire(ApiInfo.TEST)) {

return "当前请求数过高!";

}

...

}

}

以上就是RateLimiter实现接口限流的常见使用,头一次发文,mark一下。

作者:堕落门徒

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值