Guava 限流

Posted zhuomuniao

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Guava 限流相关的知识,希望对你有一定的参考价值。

mysql最大连接是有限制的

Google限流框架 Guava

技术图片

 

 

/**
 * 订单限流
 */
public class OrderRateLimiterFilter extends ZuulFilter {

    //每秒产生1000个令牌
    private static final RateLimiter RATE_LIMITER = RateLimiter.create(1000)
    @Override
    public String filterType() { //前置限流
        return PRE_TYPE;
    }

    @Override
    public int filterOrder() {
        return -4;
    }

    @Override
    public boolean shouldFilter() {
        RequestContext requestContext = RequestContext.getCurrentContext();
        HttpServletRequest request = requestContext.getRequest();
        //只对订单接口限流
        if ("/apizuul/order/api/v1/order/save".equalsIgnoreCase(request.getRequestURI())){ //拦截
            return true;
        }
        return false;
    }

    @Override
    public Object run() throws ZuulException {

        RequestContext requestContext = RequestContext.getCurrentContext();
        if (!RATE_LIMITER.tryAcquire()){ //没有拿到令牌
            requestContext.setSendZuulResponse(false); //不会往下执行
            requestContext.setResponseStatusCode(HttpStatus.TOO_MANY_REQUESTS.value());
        }
        return null;
    }

 

以上是关于Guava 限流的主要内容,如果未能解决你的问题,请参考以下文章

Guava RateLimiter限流器使用示例

Guava 限流

Guava的RateLimiter实现接口限流

两种白名单限流方案(redis lua限流,guava方案)

两种白名单限流方案(redis lua限流,guava方案)

两种白名单限流方案(redis lua限流,guava方案)