2

나는 봄 구름을 처음 접했고 온라인으로 몇 가지 예제와 자료를 통해 자신을 편안하게 만들었다. 그러나 ZUUL에 대해 읽는 동안 일부 사이트에서는 ZUUL의 application.yml 경로를 구성했으며 다른 일부 사이트에서는 요청이 개별 마이크로 서비스로 전달되며 경로를 명시 적으로 구성 할 필요가 없다고 언급했습니다. 나는 약간 혼란 스러웠다. 예를 들어, 아래 시나리오에서 경로를 구성하거나 라우트를 자동으로 라우팅하는 방법은 무엇입니까?언제 경로를 구성 할 것인가

  1. 나는 소수의 마이크로 서비스가 실행 중이며 ZUUL과 함께 이들 모두가 Eureka에 등록되어 있다고 가정 해 보겠습니다.
  2. 프런트 엔드가 동일한 서버의 다른 포트에서 실행 중이며 위의 마이크로 서비스와 상호 작용해야합니다.
  3. 필자는 위의 마이크로 서비스와 상호 작용하여 데이터를 가져와야하는 몇 가지 다른 응용 프로그램 (다른 서버에서 완전히 실행)도 있습니다.

TIA는 ..

답변

6

당신은 당신의 microservices 사이에 요청을 전달하기 위해 (microservices 유레카을 통해 해결 알고) Zuul를 사용 했습니까? 이 경우 서버 측로드 균형 조정 패턴을 사용하고 있습니다.

발견 서비스 (귀하의 경우에는 유레카)를 사용하는 경우 최선의 방법은 모든 내부 서비스 요청 (시스템 내부)에 클라이언트 측로드 균형 조정 패턴을 사용하는 것입니다. (리본 또는 RestTemplate을 사용할 수 있습니다).

Zuul은 브라우저, 모바일 응용 프로그램 또는 기타 사용자 인터페이스가 CORS (Cross-Origin Resource Sharing) 및 각 호스트에 대한 인증을 관리하지 않고 여러 호스트의 서비스를 사용할 수 있도록 시스템에 통합 된 전면 문으로 사용할 수 있습니다.

예 : 모든 그림 댓글에 대한 클라이언트 (모바일 앱) 요청. 클라이언트는 주석 서비스 주소를 알 필요가 없습니다. 프록시 주소 만 필요하며 Zuul은 요청을 올바른 서비스로 전달합니다. 요청이 GET www.myproxy.mycompany.com/comments 될 것입니다 당신은

zuul.routes.comments.path=/comments/** 
zuul.routes.comments.service-id=comments 

에 의해 application.yml/.properties에서이 작업을 수행 할 수 있습니다. 귀하의 application.yml/.properties에서 서비스 이름을 잊지 마세요 매우 중요합니다 (spring.application.name). Zuul 루트의 서비스 ID입니다 (유레카의 동일한 식별자).

시스템은 외부 서비스를 요청해야합니다 (3 번째 노트에서 언급했듯이). 이 경우 외부 서비스는 검색 클라이언트가 아니며 Zuul은 Eureka에서 서비스 ID를 찾을 수 없습니다. 당신은 Zuul이 수행됩니다 를 통해 서비스에서이 경로에

zuul.routes.currencyprovider.path=/currencies/** 
zuul.routes.currencyprovider.url=https://currencies.net/ 

, 모든 /currencies/** 요청으로 경로를 사용합니다. 이 방법을 사용하면 모든 시스템에 대해 하나의 문이 있습니다. 이것은 API Gateway pattern입니다.

때로는 시스템이 클라이언트 요청에 응답하기 위해 여러 서비스의 여러 결과를 집계해야하는 경우가 있습니다. Proxy (Zuul의 경우)에서이 작업을 수행 할 수 있습니다.

+0

안녕하세요. 답장을 보내 주셔서 감사합니다. 그것은 내가 필요한 것보다 더 많은 정보를 가지고있다 :). 나는 또 다른 질문이있다. 발견 서비스 (클라이언트 측로드 밸런싱)를 사용하고 있다면 경로를 명시 적으로 구성하는 서비스 이름을 기반으로 요청을 라우팅하는 이점이 있습니까? – Harish

+0

검색 서비스를 사용할 때 암시 적으로 클라이언트 측로드 균형 조정을 사용하지 않습니다. 그것은 서버 측 또는 클라이언트 측 LB인지를 정의하는 서비스 간의 통신 방식입니다. 구성된 경로를 사용하면 경로 (구성된 경로)가있는 지정된 서비스에만 액세스를 제한 할 수 있습니다. ** 경우에만 ** zuul.ignored-services = *를 추가하십시오. – redoff

+0

예 : 서비스 (의견, 사용자, 메트릭)가 3 개 있습니다. ** 프록시를 통해 1 개의 서비스 (예 : 댓글 서비스)에 대한 액세스를 제한하려고합니다. 당신은'zuul.ignored-services = *'와'zuul.routes.comments.path =/comments/**'''zuul.routes.comments.service-id = comments'처럼 처리합니다. 이 속성 행을 사용하면 모든 요청은 ** www.myproxy.mycompany.com/comments를 제외하고 ** 거부됩니다. – redoff