用工具guavan进行限流

1、pom

<dependency>
    <groupId>com.google.guava</groupId>
    <artifactId>guava</artifactId>
    <version>23.0</version>
</dependency>

2、在拦截器里拦截统计放行

private static final RateLimiter rateLimiter = RateLimiter.create(0.5);
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        // 立即失败机制,如果3s拿不到流量,便拒绝。tryAcquire方法可以不带参数,不带参数的话就是立即拒绝
        if (!rateLimiter.tryAcquire(3, TimeUnit.SECONDS)) {
            System.out.println("限流中......");
            return false;
        }
        System.out.println("请求成功");
        return true;
    }
RateLimiter基于“令牌通算法”来实现限流,RateLimiter只能用于单机的限流

 

posted @ 2022-01-17 00:22  得好好活  阅读(57)  评论(0)    收藏  举报