Spring Cloud에 내장된 Zuul 필터 분석

앞말
Spring Cloud는 기본적으로 Zuul이 작성하고 일부 필터를 사용합니다. 이 필터는 어떤 역할을 합니까?우리는 @EnableZuulServer, @EnableZuulProxy 두 개의 주석에 따라 전개해도 무방하다. 여러분은 이 두 주석에 대해 낯설지 않다고 믿는다.낯설어도 상관없다면 @EnableZuulProxy를 @EnableZuulServer의 증강판으로 간단히 이해할 수 있습니다.사실 Zuul이 Eureka, Ribbon 등 구성 요소와 함께 사용할 때
@EnableZuulProxy는 우리가 자주 사용하는 메모입니다.
Spring Cloud의 공식 문서에서 @EnableZuulServer만 "공백"이라고 말하는 Zuul은 과연 공백은 어디에 있을까?@EnableZuulProxy와 어떤 차이가 있을까요?많은 문제들이 본문에서 답을 찾을 것이다.
그 전에 RequestContext가 무엇인지 이해하겠습니다.
RequestContext: 필터 간에 메시지를 전달하는 데 사용됩니다.그것의 데이터는 요청된 각각의 ThreadLocal에 저장됩니다.이것은 요청 루트가 어디로 가는지, 오류, HttpServletRequest, HttpServletResponse를 RequestContext에 저장하는 데 사용됩니다.RequestContext는 ConcurrentHashMap을 확장하여 모든 데이터를 상하문에 저장할 수 있습니다.
@EnableZuulServer 필터
하나,pre 형식 필터
(1) ServletDetectionFilter: 이 필터는 요청이 Spring Dispatcher를 통과하는지 확인하는 데 사용됩니다.검사 후 isDispatcherServletRequest를 통해 부울 값을 설정합니다.
(2) FormBodyWrapperFilter: 양식 데이터를 분석하고 요청할 때 다시 인코딩합니다.
(3) DebugFilter: 말 그대로 디버깅용 필터는 zuul.debug.request=true 또는 요청할 때 debug=true 매개변수를 추가할 수 있습니다. 예를 들어 $ZUUL_HOST:ZUUL_PORT/path?debug=true 필터를 열 수 있습니다.이렇게 하면 이 필터는 RequestContext.setDebugRouting() , RequestContext.setDebugRequest() 을true로 설정합니다.
2. 루트 형식 필터
SendForwardFilter: 이 필터는 Servlet RequestDispatcher 전송 요청을 사용하고 전송 위치는 RequestContext.getCurrentContext().get("forward.to") 에 저장됩니다.라우팅은 다음과 같이 설정할 수 있습니다.

zuul:
 routes:
 abc: 
  path: /abc/**
  url: forward:/abc
그리고 접근$ZUUL_HOST:ZUUL_PORT/abc 하여 이 필터의 실행 과정을 관찰합니다.
3.post 형식 필터
SendResponseFilter: Zuul이 대리하는 마이크로서비스의 응답을 현재 응답에 기록합니다.
4. error 형식 필터
SendErrorFilter: RequestContext.getThrowable() null이 아니라면 기본값은/error로 전송되고, 속성을 설정하여 기본 전송 경로를 수정할 수 있습니다.
@EnableZuulProxy 필터
메모 @EnableZuulProxy를 사용하면 위의 필터 외에도 Spring Cloud에 다음 필터가 설치됩니다.
하나,pre 형식 필터
PreDecorationFilter: 이 필터는 제공된 RouteLocator에 따라 라우팅된 주소와 라우팅하는 방법을 결정합니다.이 공유기는 백엔드 요청에 대해 각종 에이전트와 관련된 헤더를 설정할 수 있습니다.
2. 루트 형식 필터
(1) RibbonRoutingFilter: 이 필터는 Ribbon, Hystrix 및 플러그 가능한 HTTP 클라이언트를 사용하여 요청을 보냅니다.서비스Id는 error.path 에 있습니다.이 필터는 다른 HTTP 클라이언트(예:
  • Apache HttpClient: 기본 HTTP 클라이언트
  • Squareup OkHttpClient v3: 이 클라이언트를 사용하려면 RequestContext.getCurrentContext().get("serviceId") 의classpath에 의존하고 설정해야 합니다com.squareup.okhttp3.
  • Netflix Ribbon HTTP client: 설정ribbon.okhttp.enabled = true하면 HTTP 클라이언트를 사용할 수 있습니다.주의해야 할 것은 이 클라이언트는 PATCH 방법을 지원하지 않는 것과 같은 제한이 있고, 또한 내장된 재시도 메커니즘이 있다는 것이다.
  • (2) SimpleHostRoutingFilter: 이 필터는 Apache HttpClient를 통해 지정된 URL에 요청을 보냅니다.URL은(는) 에 있습니다.
    총결산
    이상은 바로 이 글의 전체 내용입니다. 본고의 내용이 여러분의 학습이나 업무에 일정한 도움을 줄 수 있기를 바랍니다. 만약에 의문이 있으면 여러분은 댓글을 남겨 교류할 수 있습니다. 저희에 대한 지지에 감사드립니다.

    좋은 웹페이지 즐겨찾기