SpringCloud Zuul如何与Gauva结合实现高效限流?
- 内容介绍
- 文章标签
- 相关推荐
本文共计394个文字,预计阅读时间需要2分钟。
前提示:已经配置了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
限流方式:
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分钟。
前提示:已经配置了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
限流方式:
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; } }
令牌桶限流图解
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持易盾网络。

