스프링 클라우드 게이트웨이 소개
Spring Boot 2의 공식 버전은 얼마 전에 출시되었습니다. Spring Cloud Gateway는 Spring Boot 2를 기반으로하며 Spring Cloud의 새로운 프로젝트입니다. 이 프로젝트는 Spring 5, Spring Boot 2 및 Project Reactor를 포함하여 Spring Ecosystem에 구축 된 API 게이트웨이를 제공합니다. Spring Cloud Gateway는 API를 보내고 보안, 모니터링/메트릭 및 탄력성과 같은 크로스 절단 문제를 제공하는 간단하고 효율적인 방법을 제공하도록 설계되었습니다. 최신 버전은 v2.0.0.m8이며 공식 버전도 곧 여기에있을 것입니다.
스프링 클라우드 게이트웨이의 기능 :
VS Netflix Zuul
Zuul은 차단 API를 사용하여 Servlet 2.5 (3.x 사용)를 기반으로합니다. WebSockets와 같은 긴 연결을 지원하지 않습니다. Gateway는 비 차단 API를 사용하여 Spring Framework 5, Project Reactor 및 Spring Boot 2를 기반으로합니다. Websockets는 지원되며 Spring과 밀접하게 통합되어 있기 때문에 더 나은 개발 경험이 될 것입니다.
스프링 클라우드 게이트웨이 소개 연습
저자는 최근 Spring Cloud Gateway의 소스 코드를 연구했으며 대부분의 기능에 대한 소스 코드 분석에 관한 기사를 작성했지만 공식 버전은 결국 출시되지 않았습니다. 이 기사는 일반적으로 사용되는 몇 가지 기능을 보여주는 소개 관행이며 최신 공식 버전의 출시를 기대합니다.
예제는 게이트웨이 서버와 사용자 서버의 두 가지 서비스를 시작합니다. 시뮬레이션 된 시나리오는 클라이언트가 백엔드 서비스를 요청하고 게이트웨이는 백엔드 서비스에 통합 된 입구를 제공한다는 것입니다. 모든 백엔드 서비스는 서비스에 등록되어 있으며 영사를 찾았습니다 (Build ZK와 Eureka는 모두 괜찮으며 영사를 사용하는 데 더 익숙합니다). 게이트웨이는로드 밸런싱을 통해 특정 백엔드 서비스로 전달됩니다.
사용자 서비스
사용자 서비스는 영사에 등록되어 있으며 인터페이스/테스트를 제공합니다.
의존하다
필요한 종속성은 다음과 같습니다.
<pectionency> <groupid> org.springframework.cloud </groupid> <artifactid> 스프링 클라우드-스타터-헌신-컨설-디스크버리 </artifactid> </dependency> <groupid> org.springframework.boot </groupid> <artifactid> spring-starter-web </artifactid>
구성 파일
스프링 : 응용 프로그램 : 이름 : 사용자 서비스 클라우드 : 호스트 : 192.168.1.204 포트 : 8500 발견 : ip-address : $ {host_address : $ {host_address : $ {server_port : $ {server.port}} HealthCheckPath : /Health HealthCheckinterVal : 15S instance-id : {server.port.port. 8005Management : 보안 : 활성화 : False인터페이스를 노출시킵니다
@SpringBootApplication@restController@enablediscoveryCliciverClic 클래스 GateWayUserApplication {public static void main (String [] args) {springApplication.run (GateWaySerApplication.class, args); } @getMapping ( "/test") public String test () {return "ok"; }}인터페이스를 노출/테스트하고 확인합니다.
게이트웨이 서비스
게이트웨이 서비스는 다양한 라우팅 구성, 라우팅 어설 션 공장 및 필터 공장을 제공합니다.
의존하다
소개 해야하는 종속성 :
<pectionency> <groupid> org.springframework.boot </groupid> <artifactid> Spring-Boot-Actuator </artifactid> </eppendency> // webflux에 대한 종속성, <pectiency> <groupid> org.spramframework.boot </groupid>를 소개해야합니다. <Artifactid> Spring-Boot-Starter-Webflux </artifactid> </eppendency> <prection> <groupid> org.springframework.cloud </groupid> <artifactid> spring-cloud-gateway-core </artifactid> </dependency> // 서비스 검색 구성 요소 <웹 종속성 < <groupid> org.springframework.cloud </groupid> <artifactid> spring-cloud-starter-consul-discovery </artifactid> <version> 2.0.0.m6 </version> <제외> <groupid> org.springframework.boot </groupicd> <artifactid> spring-starter-starter-starter-starter-starter-starter-starter-starter-starter-starter-starter-starter-starter </제외> </제외> </dependency> // kotlin 종속성 <Pectionency> <groupId> org.jetbrains.kotlin </groupid> <artifactid> kotlin-stdlib </artifactid> <버전> $ {kotlin.version} </version> true </옵션> </delation> <pelection> <groupid> org.jetbrains.kotlin </groupid> <artifactid> kotlin-reflect </artifactid> <version> $ {kotlin.version} </version> <pectional> true </sectional> </fectionency>위에서 언급했듯이 Kotlin 관련 종속성이 소개되고 Kotlin의 라우팅 구성이 여기에서 지원되어야합니다. Spring Cloud Gateway를 사용하려면 웹 관련 구성을 제외해야합니다. WebFlux에 대한 참조를 소개합니다. 응용 프로그램이 시작되면 확인하고 도입해야합니다.
라우팅 어설 션 공장
요청 시간, 호스트, 경로, 방법 등에 따라 여러 유형의 라우팅 어설 션 공장이 있습니다. 다음 정의는 경로 기반 경로 어설 션 일치입니다.
@BeanPublic routerfunction <ServerResponse> testFunRouterFunction () {routerFunction <ServerResponse> Route = routerFunctions.route (requestRedicates.Path ( "/testFun"), request-> serverResponse.ok (). 반품 경로;}요청 된 경로가 /testfun 인 경우 OK의 상태 코드가 직접 반환되고 응답 본문은 헬로 문자열입니다.
필터 공장
게이트웨이는 종종 라우팅 요청을 필터링하고 인증 후 헤더 구성과 같은 일부 작업을 수행해야합니다. 요청 헤더 추가, 요청 매개 변수 추가, 응답 헤더 추가 및 회로 차단기 등과 같은 여러 유형의 필터링이 있습니다.
@BeanPublic LoutElocator CustomRoutElocator (RoutelocatorBuilder Builder, ThrottleGatewayFilterFactory Throttle) {//@formatter : Off Return Builder.routes () .Route (r-> R.Path ( "/image/webp") .filters (F-> F.ADDRESPONTER .uri ( "http://httpbin.org:80")) .build (); //@Formatter : on}위와 같이, 요청 경로가/image/webp 일 때, 요청은 http://httpbin.org:80으로 전달되고 응답이 필터링되어 응답 헤더 x-anotherheader : baz를 추가합니다.
맞춤형 라우팅
위의 두 하위 섹션은 API 사용자 정의 라우팅에 속하며 구성을 통해 정의 할 수도 있습니다.
스프링 : 클라우드 : 게이트웨이 : 로케이터 : 활성화 : 진정한 기본 필터 :-addResponseheader = XPronse-Default-Foo, 기본 막대 경로 : # ================================================================================================================================= ================================================================================================================================= ================================================================================================================================= ==========================================================================================================================
위의 구성은 라우팅 및 필터를 정의합니다. 글로벌 필터는 헤더 Xpronse-Default-Foo : Default-bar에 모든 응답을 추가합니다. id default_path_to_http가있는 경로는 정의되지만 우선 순위는 상대적으로 낮습니다. 요청이 일치 할 수 없으면 blueskykong.com으로 전달됩니다.
Kotlin Custom Routing
Spring Cloud Gateway는 Kotlin을 사용하여 라우팅을 사용자 정의 할 수 있습니다.
@ConfigurationClass AdditionalRoutes {@bean fun accthestelocator (builder : lourtelocatorBuilder) : lourtelocator = builder.routes {route (id = "test-kotlin") {path ( "/image/png") 필터 {addresponseheader ( "x-testheader", "foobar")}}}}}}}}} uri ( "http://httpbin.org:80")}}}요청 된 경로가/image/png 인 경우 http://httpbin.org:80으로 전달되고 필터가 설정되고 x-testeader : foobar 헤더가 응답 헤더에 추가됩니다.
서비스 검색 구성 요소
Discovery 구성 요소의 서비스 등록과 결합하여 ServiceID를 통해 특정 서비스 인스턴스로 전달됩니다. 해당 종속성은 이전 구성에 도입되었습니다.
@BeanPublic RoutedEfinitionLocator DiscoveryClientRoutEdeFinitionLocator (DiscoveryClient DiscoveryClient) {Return New DiscoveryClientRoutedEfinitionLocator (DiscoveryClient);}} DiscoveryClient를 DiscoveryClientRoutedEfinitionLocator의 생성자에 주입하십시오. 소스 코드 분석은 나중에 설명되며 여기에서 확장되지 않습니다.
스프링 : 클라우드 : 게이트웨이 : 로케이터 : 활성화 : 진정한 기본 필터 :-addResponseheader = XPronse-Default-Foo, 기본 막대 경로 : # ================================================================================================================================================================================================================================================== service_TO_USER URI : LB :/user =/user predicates : // user predicates : // - strippRefix = 1
위의 구성은 DiscoveryClient Locator의 구현을 가능하게합니다. 경로는 /사용자로 시작하는 모든 요청이 사용자 서비스로 전달되고 경로 필터가 적용되어 경로 접두사의 첫 번째 부분을 가로 채기 위해 적용됩니다. 즉, 액세스/사용자/테스트에 대한 실제 요청은 lb : // 사용자/테스트로 변환됩니다.
WebSocket
WebSocket의 게이트웨이 라우팅을 구성 할 수도 있습니다.
스프링 : 클라우드 : 게이트웨이 : 기본 필터 :-addResponseheader = XPronse-default-foo, default-bar loutes :-id : websocket_test uri : ws : // localhost : 9000 order : 9000 predicates :-path =/echo
WS 서버 WSCAT -Listen 9000을 시작하고 게이트웨이를 시작하고 (게이트웨이 포트는 9090) 클라이언트를 WSCAT에 연결합니다.
클라이언트 액세스
독자는 소스 코드를 다운로드하여 위의 기능을 시도 할 수 있습니다. 여기서는 사용자 서비스에 액세스 한 결과 만 보여줍니다.
게이트웨이는 사용자 서버에게 성공적으로로드 균형을 잡고 OK를 반환했습니다. 응답 헤더에는 글로벌 필터 설정 헤더 Xpronse-Default-Foo : Default-Bar가 포함되어 있습니다.
요약
이 기사에서는 Spring Cloud Gateway에 속하는 일부 기능 및 구성 요소를 탐색합니다. 이 새로운 API는 게이트웨이 및 프록시 지원을위한 기본적인 도구를 제공합니다. Spring Cloud Gateway 2.0의 공식 버전을 기대합니다.
소스 코드 주소
https://github.com/keets2012/spring-cloud_samples
위는이 기사의 모든 내용입니다. 모든 사람의 학습에 도움이되기를 바랍니다. 모든 사람이 wulin.com을 더 지원하기를 바랍니다.