소개
Zuul은 Netflix JVM 기반 라우터 및 서버 측로드 밸런서입니다. 가장 일반적으로 사용되는 시나리오는 프론트 엔드 UI 액세스를 위해 NGINX 리버스 프록시 백엔드 마이크로 서비스를 대체하는 것입니다.
Zuul은 리본을 사용하여 Discovery에 의해 전달되는 인스턴스를 찾아 모든 요청이 Hystrix 명령으로 실행되므로 실패는 Hystrix 메트릭에 표시됩니다.
참고 : Zuul에는 Discovery Client가 포함되어 있지 않으므로 서비스 ID 기반 경로의 경우 클래스 경로에 경로 중 하나를 제공해야합니다.
Zuul은 Spring Cloud에서 제공하는 API 게이트웨이 및 필터링 구성 요소입니다. 다음 기능을 제공합니다.
이 자습서에서는 Zuul을 사용하여 웹 요청/제품을 해당 제품 서비스로 전달하고 Zuul이 전달되었는지 여부를 확인하기 위해 프리 필터를 정의합니다.
기본 환경
프로젝트 소스 코드
여기를 클릭하십시오
Zuul 서비스를 만듭니다
Intellij에서 Maven 프로젝트를 만듭니다.
그런 다음 pom.xml에 다음 코드를 추가하십시오.
<? xml version = "1.0"encoding = "utf-8"?> <project xmlns = "http://maven.apache.org/pom/4.0.0"xmlns : xsi = "http://www.w3.org/2001/xmlschema-instance" xsi : schemalocation = "http://maven.apache.org/pom/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modeversion> 4.0.0 </modelversion> <groupid> cn.zxuqian </groupId> <버전> 1.0-snapshot </version> <부모> <groupid> org.springframework.boot </groupid> <artifactid> spring-boot-starter-parent </artifactid> <bersion> 2.0.1.release </version> </parent> <pecients> <pecientency> <groupd> groupframwork.cloud.cloud.cloud.cloud. Spring-Cloud-Starter-Zuul-> <artifactid> Spring-Cloud-Starter-Netflix-Zuul </artifactid> </fectionency> <pectionency> <groupid> org.springframework.cloud </groupid> <artifactid> spring-cloud-starter-netflix-eureka-client> </inpencivent> <groupid> org.springframework.cloud </groupid> <artifactid> Spring-Cloud-Starter-Config </artifactid> </exceentency> <pectionement> <groupid> org.springframewort.boot </groupid> <artifactid> spring-boot-starter-actuator </artifactid> </felevency> <groupid> org.springframework.boot </groupid> <artifactid> Spring-Boot-Starter-web </artifactid> </fectionency> </dependency> </dependency> </fectionency> <pectionilesmies> <pection> <groupid> org.springframework.cloud> <Artifactid> Spring-Cloud-Dependencies </artifactid> <bersion> Finchley.m9 </version> <type> pom </type> <type> import </scope> </fectionement> </fectionencymanagement> <properties> <java.version> 1.8 </java.version> <flug> <flug> <flug> <flug> <groupid> org.springframework.boot </groupid> <artifactid> spring-boot-maven-plugin </artifactid> </plugins> </build> <repositories> <repository> <id> 스프링-마일스톤 </id> <name> 스프링 마일스톤 </name> <url> https://repo.spring.io/libs-milestone </url> <snapshots> <enabled> false </enabled> </snapshots> </repository> </repository> </repository> </repository> </repositories> </project>
Spring 공식 웹 사이트 튜토리얼에서 주어진 Zuul의 인공물은 Zuul의 이전 버전의 이름 인 Spring-Cloud-Starter-Zuul이라는 점에 유의해야합니다 . Finchley.M9 버전에서 Spring-Cloud-Starter-Netflix-Zuul로 이름이 바뀌 었습니다.
src/main/resources/bootstrap.yml 파일을 추가하고 spring.application.name을 지정합니다.
봄 : 응용 프로그램 : 이름 : Zuul-Server
cn.zxuqian.application 클래스 생성 :
패키지 CN.ZXUQIAN; IMPATION CN.ZXUQIAN.FILTERS.PREFILTER; import org.springframework.boot.springApplication; import org.springframework.boot.autoconfigure.springbootApplication; import org.springframework.cloud.client.discovery. eneabledscovery org.springframework.cloud.netflix.zuul.enablezuulproxy; import org.springframework.context.annotation.bean;@enablezuulproxy@enablediscoveryclient@springbootApplicationPublic Classion {public static void main (string) {springpplication.run.run, Application.ran); } @bean public prefilter prefilter () {return new Prefilter (); }}여기서 @enablezuulproxy는 zuul을 사용한 역 프록시를 지정하고 해당 서버로 요청을 전달하는 데 사용됩니다. 그런 다음 유레카의 서비스 발견이 가능했습니다. Zuul은 또한 기본적으로로드 밸런싱을 위해 리본을 사용하므로 Eureka를 통해 등록 된 서비스를 발견 할 수 있습니다. 프리 필터는 요청 요청이 처리되기 전에 일부 작업을 수행하는 프리 필터입니다. 코드는 다음과 같습니다.
패키지 cn.zxuqian.filters; import com.netflix.zuulfilter; import com.netflix.zuul.context.requestContext; import com.netflix.zuul.exception.zuulexception; import org.slf4j.logger; import org.slf4j.logger -Admportory; javax.servlet.http.httpservletrequest; public class prefilter 확장 zuulfilter {private static logger log = loggerfactory.getLogger (prefilter.class); @override public String filtertype () {return "pre"; } @override public int filterorder () {return 1; } @override public boolean routfilter () {return true; } @override public object run ()는 zuulexception {requestContext ctx = requestContext.getCurrentContext (); httpservletrequest 요청 = ctx.getRequest (); log.info (string.format ( " %s 메소드 요청 %s", request.getMethod (), request.getRequestUrl (). toString ())); 널 리턴; }} FilterType- Zuul, Pre, Route, Post 및 Error에는 4 개의 내장 필터 유형이 있으며, 이는 오류 전, 후 및 후 및 후에 나타납니다.
FilterOrder- 필터가 실행되는 순서를 지정합니다.
필터 -이 필터를 활성화할지 여부.
실행 - 필터의 비즈니스 로직. 여기서는 요청 메소드를 기록하고 Reqeust의 요청 경로 만 기록합니다.
다음으로 구성 센터의 git 저장소에서 zuul-server.yml 파일을 작성하고 다음 구성을 추가하십시오.
서버 : 포트 : 8083zuul : 경로 : 제품 : Path : /Product /** Service : 제품 서비스
여기서 Zuul 포트는 8083으로 구성되며 모든 / 제품 / 요청이 제품 서비스 서비스에 매핑됩니다. ServiceID가 구성되지 않은 경우 제품 키는 기본적으로 ServiceID가됩니다. 이 예에서는 ServiceID에 포함되므로 ServiceID는 아래에 지정되어 있습니다. 구성이 완료된 후 GIT에 제출하십시오.
ProductsErvice 업데이트
ProductsErvice의 URI는 휴식 스타일에 더 잘 맞도록 약간 변경되었습니다.
@requestmapping ( " /list") public String productList () {log.info ( "Access on /Products endpoint"); "코트, 재킷, 스웨터, 티셔츠";} 반환여기서 @requestmapping과 일치하는 경로는 이전 /제품이었던 /목록으로 변경됩니다.
웹 클라이언트를 업데이트하십시오
웹 클라이언트의 Productservice에 새 방법을 추가하십시오.
public String productListzUul () {return this.resttemplate.getForObject ( "http : // zuul-server/product/list", string.class);}이번에는 Zuul-Server 서비스를 직접 요청한 다음 제품 서비스 요청을 프록시합니다. 마지막으로 ProductController에 요청 처리 방법을 추가하십시오.
@RequestMapping ( "/upboll/list") public String productListzUul () {return productService.productListzUul ();}ProductService 클래스에서 처리 /제품 /목록 요청을 처리 한 다음 메소드를 호출하는 데 사용됩니다.
시험
MVN Spring-Boot 사용 : Configserver, Registry, Zuulserver, ProductsErvice 및 웹 프로젝트를 시작한 다음 두 번째 ProductsErvice를 시작한 다음 Server_port = 8082 Spring-Boot : Run을 사용하십시오.
http : // localhost : 8080/product/list를 여러 번 방문하고 브라우저에서 반환 된 결과를 보는 것 외에도 Zuulserver의 명령 줄 창에 다음 단어를 볼 수 있습니다.
메소드 요청 http : // xuqians-imac : 8083/product/list
그런 다음 두 ProductsErvices의 명령 줄 창에서 임의의 모양도 볼 수 있습니다.
/제품에 대한 액세스 종말점
이는 Zuulserver가 자동으로로드 밸런싱을 의미합니다.
요약
위는이 기사의 전체 내용입니다. 이 기사의 내용에 모든 사람의 연구 나 작업에 대한 특정 참조 가치가 있기를 바랍니다. 궁금한 점이 있으면 의사 소통을 위해 메시지를 남길 수 있습니다. Wulin.com을 지원 해주셔서 감사합니다.