SpringCloud Zuul如何与Gauva结合实现高效限流?

2026-05-26 05:351阅读0评论SEO问题
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计394个文字,预计阅读时间需要2分钟。

SpringCloud Zuul如何与Gauva结合实现高效限流?

前提示:已经配置了Zuul网关,参考:[配置Zuul网关](https://www.jb51.net/article/182894.htm)。

限流方式:1. Nginx层限流 2. 网关层限流

1. 添加限流过滤器

javaimport com.alibaba.fastjson.JSON;import com.google.common.util.concurrent.RateLimiter;

(注意:以上代码片段仅为示例,具体实现需根据项目需求进行)

前提:

已经配置Zuul网关

参考:

www.jb51.net/article/182894.htm

限流方式:

SpringCloud Zuul如何与Gauva结合实现高效限流?

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.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; } }

令牌桶限流图解

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持易盾网络。

本文共计394个文字,预计阅读时间需要2分钟。

SpringCloud Zuul如何与Gauva结合实现高效限流?

前提示:已经配置了Zuul网关,参考:[配置Zuul网关](https://www.jb51.net/article/182894.htm)。

限流方式:1. Nginx层限流 2. 网关层限流

1. 添加限流过滤器

javaimport com.alibaba.fastjson.JSON;import com.google.common.util.concurrent.RateLimiter;

(注意:以上代码片段仅为示例,具体实现需根据项目需求进行)

前提:

已经配置Zuul网关

参考:

www.jb51.net/article/182894.htm

限流方式:

SpringCloud Zuul如何与Gauva结合实现高效限流?

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.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; } }

令牌桶限流图解

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持易盾网络。