91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

SpringCloud Zuul過濾器和谷歌Gauva實現限流的方法

發布時間:2021-05-17 11:35:42 來源:億速云 閱讀:184 作者:小新 欄目:編程語言

小編給大家分享一下SpringCloud Zuul過濾器和谷歌Gauva實現限流的方法,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

前提:

已經配置Zuul網關

限流方式:

1)nginx層限流

2)網關層限流

1.添加限流過濾器

import com.alibaba.fastjson.JSON;
import com.google.common.util.concurrent.RateLimiter;
import com.netflix.zuul.ZuulFilter;
import com.netflix.zuul.context.RequestContext;
import com.netflix.zuul.exception.ZuulException;
import org.apache.commons.lang.StringUtils;
import org.springframework.http.HttpStatus;
import org.springframework.stereotype.Component;
import org.springframework.util.AntPathMatcher;

import javax.servlet.http.HttpServletRequest;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import static org.springframework.cloud.netflix.zuul.filters.support.FilterConstants.PRE_TYPE;

/**
 * 訂單限流接口
 */
@Component
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 context = RequestContext.getCurrentContext();
    HttpServletRequest request = context.getRequest();

    ///apigateway/order/api/v1/order/test
    System.out.println(request.getRequestURI());
    //http://127.0.0.1:9000/apigateway/order/api/v1/order/test
    System.out.println(request.getRequestURL());

    //限流的接口
    List<String> noFIlter = new ArrayList<>();
    noFIlter.add("/apigateway/order/**");

    AntPathMatcher matcher = new AntPathMatcher();
    for (String pattern : noFIlter) {//pattern--/user/**
      if (StringUtils.isNotEmpty(pattern)
          && matcher.match(pattern, request.getRequestURI())) {
        return true;
      }
    }

    return false;
  }

  @Override
  public Object run() throws ZuulException {

    //可以用JMeter來進行測試
    RequestContext context = RequestContext.getCurrentContext();
    //tryAcquire達到最大流量時,立刻限流,也可以配置參數
    if (!RATE_LIMITER.tryAcquire()) {
      Map<String, Object> result = new HashMap<>();
      result.put("code", 429);
      result.put("msg", "目前訪問量過大,限流了...");

      context.setSendZuulResponse(false);
      context.setResponseStatusCode(HttpStatus.TOO_MANY_REQUESTS.value());
      context.setResponseBody(JSON.toJSONString(result));
      //解決中文亂碼
      context.getResponse().setCharacterEncoding("UTF-8");
      context.getResponse().setContentType("text/html;charset=UTF-8");
    }

    return null;
  }
}

令牌桶限流圖解

SpringCloud Zuul過濾器和谷歌Gauva實現限流的方法

以上是“SpringCloud Zuul過濾器和谷歌Gauva實現限流的方法”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

句容市| 永新县| 精河县| 寿光市| 克什克腾旗| 尚志市| 闸北区| 大洼县| 同仁县| 宣化县| 定南县| 驻马店市| 麻江县| 泌阳县| 吴江市| 衡阳市| 岱山县| 庆安县| 永福县| 额尔古纳市| 洛宁县| 麻栗坡县| 襄樊市| 宁明县| 武宣县| 谢通门县| 平定县| 泾源县| 呼图壁县| 鹿泉市| 织金县| 余江县| 阿拉善右旗| 河源市| 万源市| 湘乡市| 宁明县| 恩平市| 嘉荫县| 怀仁县| 车致|