Spring Cloud Zuul 필터 깊이 이해

4466 단어 springzuul필터
머리말
필 터 는 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 는 다음 과 같은 몇 가지 방법 을 실현 해 야 합 니 다.
  • filter Type:필터 의 종 류 를 되 돌려 줍 니 다.pre,route,post,error 등 몇 가지 수치 가 있 는데 각각 위의 몇 가지 필터 에 대응 합 니 다.상세 한 것 은com.netflix.zuul.ZuulFilter.filterType() 중의 주석 을 참고 할 수 있다.
  • filter Order:int 값 을 되 돌려 필터 의 실행 순 서 를 지정 합 니 다.서로 다른 필 터 는 같은 숫자 를 되 돌려 줍 니 다.
  • shouldFilter:이 필 터 를 실행 할 지 여 부 를 판단 하기 위해 boolean 값 을 되 돌려 줍 니 다.true 는 실행 을 표시 하고 false 는 실행 하지 않 음 을 표시 합 니 다.
  • run:필터 의 구체 적 인 논리.이 경우 요청 한 HTTP 방법 과 요청 한 주 소 를 인쇄 하도록 합 니 다.
  • (2)시작 클래스 를 수정 하여 시작 클래스 에 다음 과 같은 내용 을 추가 합 니 다.
    
    @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() .
    총결산
    이상 은 이 글 의 전체 내용 입 니 다.본 논문 의 내용 이 여러분 의 학습 이나 업무 에 어느 정도 도움 이 되 기 를 바 랍 니 다.궁금 한 점 이 있 으 면 댓 글 을 남 겨 주 십시오.

    좋은 웹페이지 즐겨찾기