SpringCloud Zuul 필터 와 구 글 Gauva 의 흐름 제한 실현
3357 단어 GauvaSpringCloudZuul흐름 을 제한 하 다
Zuul 게 이 트 웨 이 설정 됨
참고:
https://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.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;
}
}
영패 통 제한 흐름 도해이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
[Spring] Servlet(서블릿)이란? Servlet, Servlet Container 알아보기✔️ HTML Form으로 데이터를 주고받을 때 해당 data가 form형식이므로, HTTP 메시지의 Content Type는 application/x-www-form-unreloaded이고, username=kim...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.