亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

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

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

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

北京市| 开远市| 白河县| 晋宁县| 天镇县| 石林| 天柱县| 灌阳县| 苍南县| 宝鸡市| 建瓯市| 自治县| 芦溪县| 宝兴县| 托克托县| 宜州市| 汶川县| 邯郸县| 扬中市| 五指山市| 临江市| 珲春市| 平原县| 牟定县| 上林县| 沐川县| 沂水县| 浏阳市| 玉山县| 德安县| 巍山| 渝中区| 汶上县| 乌拉特中旗| 油尖旺区| 花莲县| 保康县| 河北区| 宁都县| 山丹县| 滦南县|