zoukankan      html  css  js  c++  java
  • 使用google的guova开发高并发下的接口限流

    使用google的guova开发高并发下的接口限流

    使用google的guova进行限流

    1、guova的限流方式,在定时产生定量的令牌,令牌的数量限制了流量

    2、增加一个订单接口限流类OrderRateFilter,继承ZuulFilter,并重载方法;filterType、filterOrder、shouldFilter、run

        filterType中return PRE_TYPE;

        fileterOrder中应该优先级最高,设为-4

        shouldFilter中设置限流的方法(类似于鉴权)

         RequestContext requestContext= RequestContext.getCurrentContext();

    HttpServletRequest httpServletRequest=requestContext.getRequest();

    //System.out.println(httpServletRequest.getRequestURI());///apigateway/order/api/v1/orderfeignhystrix/save

    //System.out.println(httpServletRequest.getRequestURL());//http://192.168.136.128:9000/apigateway/order/api/v1/orderfeignhystrix/save

     

    if ("/apigateway/order/api/v1/orderfeignhystrix/save".equalsIgnoreCase(httpServletRequest.getRequestURI()))

    {

    return true;

    }

        run中设置 ,获取令牌

        guava中需要增加令牌设置

        //每秒1000个令牌

        private static final RateLimiter RATE_LIMITER=RateLimiter.create(1000);

        

        在run中增加RATELIMITER.tryActquire();

            如果未取到这返回过多的访问

              

              

    if (!RATE_LIMITER.tryAcquire())

    {

    RequestContext requestContext=RequestContext.getCurrentContext();

    requestContext.setSendZuulResponse(false);

    requestContext.setResponseStatusCode(HttpStatus.TOO_MANY_REQUESTS.value());

    }

  • 相关阅读:
    unalias---取消命令别名
    alias---设置别名
    type---显示指定命令的类型
    logout命令用于退出当前登录的Shell
    enable&&builtin---shell内部命令
    read---读取变量值
    readonly&&declare&&unset &&export&&env环境变量
    fc---输出历史命令列表
    command---调用指定的指令并执行
    terminfo 数据库?
  • 原文地址:https://www.cnblogs.com/programer-xinmu78/p/10551551.html
Copyright © 2011-2022 走看看