Spring Cloud Zuul 필터 깊이 이해
필 터 는 Zuul 의 핵심 구성 요소 입 니 다.이 글 은 Zuul 의 필 터 를 자세히 토론 합 니 다.다음은 할 말 이 많 지 않 으 니 상세 한 소 개 를 좀 봅 시다.
필터 종류 및 요청 수명 주기
Zuul 의 대부분의 기능 은 필 터 를 통 해 이 루어 집 니 다.Zuul 에 서 는 요청 한 전형 적 인 수명 주기 에 대응 하 는 네 가지 표준 필터 형식 을 정의 합 니 다.
(1)PRE:이 필 터 는 경로 가 요청 되 기 전에 호출 됩 니 다.저 희 는 이러한 필 터 를 이용 하여 인증 을 실현 하고 클 러 스 터 에서 요청 한 마이크로 서 비 스 를 선택 하 며 디 버 깅 정 보 를 기록 할 수 있 습 니 다.
(2)ROUTING:이 필 터 는 마이크로 서비스 로 이동 할 것 을 요청 합 니 다.이 필 터 는 마이크로 서비스 에 보 내 는 요청 을 구축 하고 아파 치 HttpClient 나 Netfilx Ribbon 으로 마이크로 서 비 스 를 요청 하 는 데 사 용 됩 니 다.
(3)POST:이 필 터 는 마이크로 서비스 이후 에 실 행 됩 니 다.이 필 터 는 표준 HTTP Header 를 추가 하고 통계 정보 와 지 표를 수집 하 며 마이크로 서비스 에서 클 라 이언 트 에 응답 을 보 내 는 데 사용 할 수 있 습 니 다.
(4)ERROR:다른 단계 에서 오류 가 발생 했 을 때 이 필 터 를 실행 합 니 다.
기본 필터 형식 을 제외 하고 Zuul 은 사용자 정의 필터 형식 을 만 들 수 있 습 니 다.예 를 들 어 저 희 는 STATIC 형식의 필 터 를 맞 춤 형 으로 만 들 수 있 습 니 다.Zuul 에서 직접 응답 을 만 들 고 백 엔 드 로 전송 하 라 는 마이크로 서 비 스 를 하지 않 습 니 다.
Zuul 이 요청 한 생명 주 기 는 그림 8-5 와 같 습 니 다.이 그림 은 다양한 종류의 필터 의 실행 순 서 를 상세 하 게 설명 합 니 다.
Zuul 이 요청 한 수명 주기
Zuul 필터 작성
필터 형식 과 요청 수명 주 기 를 이해 한 후에 Zuul 필 터 를 만 듭 니 다.Zuul 필 터 를 만 드 는 것 은 매우 간단 합 니 다.우 리 는 추상 적 인 Zuul Filter 를 계승 한 다음 에 몇 가지 추상 적 인 방법 을 실현 하면 됩 니 다.
이제 요청 로 그 를 인쇄 할 수 있 도록 간단 한 Zuul 필 터 를 만 듭 니 다.
(1)프로젝트 microservice-gateway-zuul 을 복사 하여 ArtifactId 를 microservice-gateway-zul-filter 로 수정 합 니 다.
(2)사용자 정의 Zuul 필 터 를 작성 합 니 다.
public class PreRequestLogFilter extends ZuulFilter {
private static final Logger LOGGER = LoggerFactory.getLogger(PreRequestLogFilter.class);
@Override
public String filterType() {
return "pre";
}
@Override
public int filterOrder() {
return 1;
}
@Override
public boolean shouldFilter() {
return true;
}
@Override
public Object run() {
RequestContext ctx = RequestContext.getCurrentContext();
HttpServletRequest request = ctx.getRequest();
PreRequestLogFilter.LOGGER.info(String.format("send %s request to %s", request.getMethod(), request.getRequestURL().toString()));
return null;
}
}
코드 를 통 해 알 수 있 듯 이 사용자 정의 Zuul Filter 는 다음 과 같은 몇 가지 방법 을 실현 해 야 합 니 다.com.netflix.zuul.ZuulFilter.filterType()
중의 주석 을 참고 할 수 있다.
@Bean
public PreRequestLogFilter preRequestLogFilter() {
return new PreRequestLogFilter();
}
테스트(1)마이크로 서비스-discovery-eureka 를 시작 합 니 다.
(2)microservice-provider-user 를 시작 합 니 다.
(3)마이크로 서비스-gateway-zuul-filter 를 시작 합 니 다.
(4)방문http://localhost:8040/microservice-provider-user/1,다음 과 같은 로 그 를 얻 을 수 있 습 니 다.
[nio-8040-exec-6] c.i.c.s.filters.pre.PreRequestLogFilter : send GET request to http://localhost:8040//microservice-provider-user/1
사용자 정의 Zuul 필터 가 실행 되 었 음 을 설명 합 니 다.Zuul 필터 사용 안 함
Spring Cloud 는 기본적으로 Zuul 로 작성 되 고 일부 필 터 를 사용 합 니 다.예 를 들 어 DebugFilter,FormBody Wrapper Filter,PreDecorationFilter 등 입 니 다.이 필 터 는 spring-cloud-netflix-core 라 는 Jar 가방 의 org.spring from work.cloud.netflix.zul.filers 가방 에 저 장 됩 니 다.
일부 장면 에서 일부 필 터 를 사용 하지 않 으 려 면 어떻게 해 야 합 니까?
정 답 은 매우 간단 합 니 다.설정
zuul.<SimpleClassName>.<filterType>.disable=true
만 하면 Simple ClassName 에 대응 하 는 필 터 를 사용 하지 않 을 수 있 습 니 다.필터org.springframework.cloud.netflix.zuul.filters.post.SendResponseFilter
의 경우 설정zuul.SendResponseFilter.post.disable=true
만 하면 이 필 터 를 사용 하지 않 을 수 있 습 니 다.마찬가지 로'Zuul 필터 작성'절 에 작 성 된 필 터 를 사용 하지 않 으 려 면 설정
zuul.PreRequestLogFilter.pre.disable=true
만 하면 됩 니 다.TPS
(1)관련 코드
com.netflix.zuul.ZuulFilter.disablePropertyName()
,com.netflix.zuul.ZuulFilter.isFilterDisabled()
,com.netflix.zuul.ZuulFilter.runFilter()
.총결산
이상 은 이 글 의 전체 내용 입 니 다.본 논문 의 내용 이 여러분 의 학습 이나 업무 에 어느 정도 도움 이 되 기 를 바 랍 니 다.궁금 한 점 이 있 으 면 댓 글 을 남 겨 주 십시오.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
thymeleaf로 HTML 페이지를 동적으로 만듭니다 (spring + gradle)지난번에는 에서 화면에 HTML을 표시했습니다. 이번에는 화면을 동적으로 움직여보고 싶기 때문에 입력한 문자를 화면에 표시시키고 싶습니다. 초보자의 비망록이므로 이상한 점 등 있으면 지적 받을 수 있으면 기쁩니다! ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.