SpringCloud 차세 대 게 이 트 웨 이 상세 설명
7129 단어 SpringCloudGateway
1.1 안내
스프링 클 라 우 드 게 이 트 웨 이 는 스프링 클 라 우 드 생태계 의 게 이 트 웨 이 로 Zuul 을 대체 하 는 것 이 목표 이 며,스프링 클 라 우 드 2.0 이상 버 전에 서 는 새로운 버 전의 Zuul 2.0 이상 최신 고성능 버 전 을 통합 하지 않 았 으 며,여전히 사용 하 는 Zuul 1.x 비 Reactor 모델 의 오래된 버 전이 다.한편,게 이 트 웨 이의 성능 을 향상 시 키 기 위해 SpringCloud Gateway 는 WebFlux 프레임 워 크 를 바탕 으로 이 루어 졌 고 WebFlux 프레임 워 크 바 텀 은 고성능 Reactor 모드 통신 프레임 워 크 Netty 를 사용 했다.
Spring Cloud Gateway 의 목 표 는 통-의 경로 방식 을 제공 하고 Filter 체인 을 바탕 으로 게 이 트 웨 이 기본 적 인 기능 을 제공 합 니 다.예 를 들 어 안전,모니터링/기준,그리고 흐름 제한 등 입 니 다.
한 마디 로 springCloud Geteway 가 사용 하 는 Webflux 의 reactor-netty 응답 식 이 구성 되 고 바 텀 은 Netty 통신 프레임 워 크 를 사용 합 니 다.
1.2 역할
2.1 루트 루트
게 이 트 웨 이 를 구축 하 는 기본 모듈 은 ID,대상 URI,일련의 단언 과 필터 로 구성 되 어 있 으 며,true 라 고 단언 하면 이 경로 와 일치 합 니 다.
2.2,Predicate 단언
참고 로 자바 8 의 자바 util.function.Predicate 개발 자 는 HTTP 요청 의 모든 내용(예 를 들 어 요청 헤더 나 요청 매개 변수)을 일치 시 킬 수 있 습 니 다.요청 이 단언 과 일치 하면 경로 가 진 행 됩 니 다.
2.3,필터 필터 링
Spring 프레임 워 크 의 Gateway Filter 인 스 턴 스 를 말 합 니 다.필 터 를 사용 하면 경로 가 요청 되 기 전이 나 그 후에 요청 을 수정 할 수 있 습 니 다.
2.4 전체
3.Getway 작업 절차
4.1、pom
<!-- gateway-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-gateway</artifactId> </dependency>
4.2 경로 설정yml:
server:
port: 9527
spring:
application:
name: cloud-gateway
cloud:
gateway:
routes:
- id: payment_routh\#경로 의 ID,고정 규칙 은 없 지만 유일한 것 을 요구 합 니 다.서비스 이름 에 맞 추 는 것 을 권장 합 니 다.
uri: http://localhost:8001 #일치 후 서 비 스 를 제공 하 는 경로 주소
predicates:
- Path=/payment/get/** #단언,경로 가 일치 하 는 진행 경로
- id: payment_routh2
uri: http://localhost:8001
predicates:
- Path=/payment/lb/** #단언,경로 가 일치 하 는 진행 경로
eureka:
instance:
hostname: cloud-gateway-service
client:
service-url:
register-with-eureka: true
fetch-registry: true
defaultZone: http://eureka7001.com:7001/eureka
bean:
package com.rw.springcloud.config;
import org.springframework.cloud.gateway.route.RouteLocator;
import org.springframework.cloud.gateway.route.builder.RouteLocatorBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class GateWayConfig {
@Bean
public RouteLocator customRouteLocator(RouteLocatorBuilder routeLocatorBuilder){
RouteLocatorBuilder.Builder routes=routeLocatorBuilder.routes();
routes.route("path_rout_rw1",
r->r.path("/guonei")
.uri("http://news.baidu.com/guonei"))
.build();
return routes.build();
}
}
5.마이크로 서비스 이름 을 통 해 동적 경로 실현기본 적 인 상황 에서 Gateway 는 등록 센터 에 등 록 된 서비스 목록 에 따라 등록 센터 의 마이크로 서비스 이름 을 경로 로 동적 경 로 를 만들어 퍼 가기 하여 동적 경로 의 기능 을 실현 합 니 다.
yml:
server:
port: 9527
spring:
application:
name: cloud-gateway
cloud:
gateway:
discovery:
locator:
enabled:true\#등록 센터 에서 동적 으로 루트 를 만 드 는 기능 을 켜 고 마이크로 서비스 이름 을 이용 하여 루트 를 진행 합 니 다
routes:
- id: payment_routh\#경로 의 ID,고정 규칙 은 없 지만 유일한 것 을 요구 합 니 다.서비스 이름 에 맞 추 는 것 을 권장 합 니 다.
# uri: http://localhost:8001 #일치 후 서 비 스 를 제공 하 는 경로 주소
uri: lb://cloud-payment-service
predicates:
- Path=/payment/get/** #단언,경로 가 일치 하 는 진행 경로
- id: payment_routh2
#uri: http://localhost:8001
uri: lb://cloud-payment-service
predicates:
- Path=/payment/lb/** #단언,경로 가 일치 하 는 진행 경로
eureka:
instance:
hostname: cloud-gateway-service
client:
service-url:
register-with-eureka: true
fetch-registry: true
defaultZone: http://eureka7001.com:7001/eureka
6.Predicate 의 사용
7.Filter 의 사용
역할
7.2,Spring Cloud Gateway 의 Filter
생명주기
두 개의 인터페이스 소개:GlobalFilter,Ordered
기능:
package com.rw.springcloud.filter;
import org.springframework.cloud.gateway.filter.GatewayFilterChain;
import org.springframework.cloud.gateway.filter.GlobalFilter;
import org.springframework.core.Ordered;
import org.springframework.http.HttpStatus;
import org.springframework.stereotype.Component;
import org.springframework.web.server.ServerWebExchange;
import reactor.core.publisher.Mono;
import java.util.Date;
@Component
public class MyLogGateWayFilter implements GlobalFilter, Ordered {
@Override
public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
System.out.println("*********com in MyLogGateWayFilter"+new Date());
String name=exchange.getRequest().getQueryParams().getFirst("uname");
if(name==null){
System.out.println("****** null, ");
exchange.getResponse().setStatusCode(HttpStatus.NOT_ACCEPTABLE);
return exchange.getResponse().setComplete();
}
return chain.filter(exchange);
}
@Override
public int getOrder() {
return 0;
}
}
효과:요청 주소 에 uname 가 있어 야 접근 할 수 있 습 니 다.http://localhost:9527/payment/lb?uname=z3이상 은 SpringCloud 차세 대 게 이 트 웨 이 게 이 트 웨 이 에 대한 상세 한 내용 입 니 다.SpringCloud 게 이 트 웨 이에 관 한 자 료 는 저희 의 다른 관련 글 을 주목 해 주 십시오!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
[Spring Cloud] LoadBancer-01discoveryservice-eureka 라는 프로젝트를 생성한다 3개 항목을 추가한다. 1. DiscoveryserviceEurekaApplication.java 생성된 -application에 @EnableEu...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.