欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

前提:

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

參考:

http://www.dbjr.com.cn/article/182894.htm

限流方式:

1)nginx層限流

2)網(wǎng)關(guān)層限流

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個(gè)令牌
  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來進(jìn)行測(cè)試
    RequestContext context = RequestContext.getCurrentContext();
    //tryAcquire達(dá)到最大流量時(shí),立刻限流,也可以配置參數(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;
  }
}

令牌桶限流圖解

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • SpringBoot JWT實(shí)現(xiàn)token登錄刷新功能

    SpringBoot JWT實(shí)現(xiàn)token登錄刷新功能

    JWT本身是無狀態(tài)的,這點(diǎn)有別于傳統(tǒng)的session,不在服務(wù)端存儲(chǔ)憑證。這種特性使其在分布式場(chǎng)景,更便于擴(kuò)展使用。接下來通過本文給大家分享SpringBoot JWT實(shí)現(xiàn)token登錄刷新功能,感興趣的朋友一起看看吧
    2021-09-09
  • Java簡(jiǎn)單實(shí)現(xiàn)農(nóng)夫過河問題示例

    Java簡(jiǎn)單實(shí)現(xiàn)農(nóng)夫過河問題示例

    這篇文章主要介紹了Java簡(jiǎn)單實(shí)現(xiàn)農(nóng)夫過河問題,簡(jiǎn)單描述了農(nóng)夫過河問題的概念、原理并結(jié)合簡(jiǎn)單實(shí)例形式分析了java解決農(nóng)夫過河問題的相關(guān)操作技巧,需要的朋友可以參考下
    2017-12-12
  • mapstruct的用法之qualifiedByName示例詳解

    mapstruct的用法之qualifiedByName示例詳解

    qualifiedByName的意思就是使用這個(gè)Mapper接口中的指定的默認(rèn)方法去處理這個(gè)屬性的轉(zhuǎn)換,而不是簡(jiǎn)單的get?set,今天通過本文給大家介紹下mapstruct的用法之qualifiedByName示例詳解,感興趣的朋友一起看看吧
    2022-04-04
  • Java Servlet線程中AsyncContext異步處理Http請(qǐng)求

    Java Servlet線程中AsyncContext異步處理Http請(qǐng)求

    這篇文章主要介紹了Java Servlet線程中AsyncContext異步處理Http請(qǐng)求及在業(yè)務(wù)中應(yīng)用,AsyncContext是Servlet 3.0使Servlet 線程不再需要一直阻塞,直到業(yè)務(wù)處理完畢才能再輸出響應(yīng),最后才結(jié)束該Servlet線程
    2023-03-03
  • Java中List的使用方法簡(jiǎn)單介紹

    Java中List的使用方法簡(jiǎn)單介紹

    這篇文章主要針對(duì)Java中List的使用方法為大家介紹了進(jìn)行簡(jiǎn)單介紹,List是個(gè)集合接口,只要是集合類接口都會(huì)有個(gè)“迭代子”( Iterator ),利用這個(gè)迭代子,就可以對(duì)list內(nèi)存的一組對(duì)象進(jìn)行操作,感興趣的小伙伴們可以參考一下
    2016-07-07
  • Java中串行接口調(diào)用優(yōu)化方式

    Java中串行接口調(diào)用優(yōu)化方式

    這篇文章主要介紹了Java中串行接口調(diào)用優(yōu)化方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-05-05
  • mybatis?plus中如何編寫sql語句

    mybatis?plus中如何編寫sql語句

    這篇文章主要介紹了mybatis?plus中如何編寫sql語句,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-11-11
  • Java導(dǎo)出Word文檔的實(shí)現(xiàn)方法詳解

    Java導(dǎo)出Word文檔的實(shí)現(xiàn)方法詳解

    這篇文章主要給大家介紹了關(guān)于Java導(dǎo)出Word文檔的實(shí)現(xiàn)方法,在日常的開發(fā)工作中,我們時(shí)常會(huì)遇到導(dǎo)出Word文檔報(bào)表的需求,比如公司的財(cái)務(wù)報(bào)表、醫(yī)院的患者統(tǒng)計(jì)報(bào)表、電商平臺(tái)的銷售報(bào)表等等,需要的朋友可以參考下
    2023-08-08
  • 你所不知道的Spring的@Autowired實(shí)現(xiàn)細(xì)節(jié)分析

    你所不知道的Spring的@Autowired實(shí)現(xiàn)細(xì)節(jié)分析

    這篇文章主要介紹了你所不知道的Spring的@Autowired實(shí)現(xiàn)細(xì)節(jié)分析,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-08-08
  • 基于Mybatis Plus實(shí)現(xiàn)代碼生成器CodeGenerator

    基于Mybatis Plus實(shí)現(xiàn)代碼生成器CodeGenerator

    這篇文章主要介紹了基于Mybatis Plus實(shí)現(xiàn)代碼生成器CodeGenerator,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-08-08

最新評(píng)論