最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

SpringCloud Zuul過濾器和谷歌Gauva實現(xiàn)限流

 更新時間:2020年03月17日 14:07:07   作者:玉天恒  
這篇文章主要介紹了SpringCloud Zuul過濾器和谷歌Gauva實現(xiàn)限流,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下

前提:

已經(jīng)配置Zuul網(wǎng)關

參考:

http://m.fzitv.net/article/182894.htm

限流方式:

1)nginx層限流

2)網(wǎng)關層限流

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 {

  //每秒產(chǎn)生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達到最大流量時,立刻限流,也可以配置參數(shù)
    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;
  }
}

令牌桶限流圖解

以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關文章

  • SpringBoot中使用redis做分布式鎖的方法

    SpringBoot中使用redis做分布式鎖的方法

    這篇文章主要介紹了SpringBoot中使用redis做分布式鎖的方法,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-09-09
  • Java List與數(shù)組互轉(zhuǎn)方式

    Java List與數(shù)組互轉(zhuǎn)方式

    這篇文章主要介紹了Java List與數(shù)組互轉(zhuǎn)方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-07-07
  • 一文詳解Maven的setting文件

    一文詳解Maven的setting文件

    maven?是目前java?常見的一款包管理工具,通過?maven?我們可以很方便的對項目進行編譯、打包、部署等操作,本文將詳細帶大家了解一下Maven?setting文件,需要的朋友可以參考下
    2024-02-02
  • SpringBoot入門系列之JPA mysql

    SpringBoot入門系列之JPA mysql

    這篇文章主要介紹了SpringBoot入門系列之JPA mysql的相關資料,需要的朋友可以參考下
    2017-04-04
  • SpringMVC中RequestBody注解的List參數(shù)傳遞方式

    SpringMVC中RequestBody注解的List參數(shù)傳遞方式

    這篇文章主要介紹了SpringMVC中RequestBody注解的List參數(shù)傳遞方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-10-10
  • Java編程偽共享與緩存行填充

    Java編程偽共享與緩存行填充

    這篇文章主要介紹了Java編程偽共享與緩存行填充,下面文章Disruptor提到的CPU緩存話題,做了一些嘗試和研究,如Disruptor所說,CPU有緩存?zhèn)喂蚕淼膯栴},并且通過緩存行填充能完美的解決這個問題,需要的朋友可以參考一下
    2021-09-09
  • spring一個項目多個模塊聚合打包問題解決方案(最新推薦)

    spring一個項目多個模塊聚合打包問題解決方案(最新推薦)

    最近遇到個需求,針對后端解耦模塊較多的項目,想在云端啟動時簡潔些只啟動一個jar文件的情景,本文重點給大家介紹spring一個項目多個模塊聚合打包問題解決方案,感興趣的朋友一起看看吧
    2023-09-09
  • Java實現(xiàn)簡單的分頁功能

    Java實現(xiàn)簡單的分頁功能

    這篇文章主要為大家詳細介紹了Java實現(xiàn)簡單的分頁功能,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-08-08
  • JAVA中判空方法isEmpty()用法舉例詳解

    JAVA中判空方法isEmpty()用法舉例詳解

    這篇文章主要給大家介紹了關于JAVA中判空方法isEmpty()用法的相關資料,isEmpty()是Java中常用的方法之一,用于判斷集合、字符串、數(shù)組等是否為空,文中通過代碼將解決的辦法介紹的非常詳細,需要的朋友可以參考下
    2024-06-06
  • JAVA實現(xiàn)異步調(diào)用實例代碼

    JAVA實現(xiàn)異步調(diào)用實例代碼

    在java平臺,實現(xiàn)異步調(diào)用的角色主要三種角色:調(diào)用者、取貨憑證、真實數(shù)據(jù)。本篇文章給大家介紹java實現(xiàn)異步調(diào)用實例代碼,需要的朋友可以參考下
    2015-09-09

最新評論

利川市| 巩义市| 舞钢市| 沂水县| 辽阳市| 永清县| 澎湖县| 清水县| 保德县| 屏东市| 镇雄县| 灵石县| 禄丰县| 招远市| 太原市| 彭阳县| 隆化县| 顺义区| 庄浪县| 西峡县| 包头市| 理塘县| 上饶县| 黄大仙区| 思茅市| 阳春市| 北安市| 夹江县| 淮安市| 德阳市| 乌拉特前旗| 芒康县| 长兴县| 察雅县| 固安县| 张家界市| 山西省| 夏邑县| 玛多县| 辽中县| 曲阜市|