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 클라이언트(예:RequestContext.getCurrentContext().get("serviceId")
의classpath에 의존하고 설정해야 합니다com.squareup.okhttp3
.ribbon.okhttp.enabled = true
하면 HTTP 클라이언트를 사용할 수 있습니다.주의해야 할 것은 이 클라이언트는 PATCH 방법을 지원하지 않는 것과 같은 제한이 있고, 또한 내장된 재시도 메커니즘이 있다는 것이다.총결산
이상은 바로 이 글의 전체 내용입니다. 본고의 내용이 여러분의 학습이나 업무에 일정한 도움을 줄 수 있기를 바랍니다. 만약에 의문이 있으면 여러분은 댓글을 남겨 교류할 수 있습니다. 저희에 대한 지지에 감사드립니다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
thymeleaf로 HTML 페이지를 동적으로 만듭니다 (spring + gradle)지난번에는 에서 화면에 HTML을 표시했습니다. 이번에는 화면을 동적으로 움직여보고 싶기 때문에 입력한 문자를 화면에 표시시키고 싶습니다. 초보자의 비망록이므로 이상한 점 등 있으면 지적 받을 수 있으면 기쁩니다! ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.