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,3 대 핵심 개념
    2.1 루트 루트
    게 이 트 웨 이 를 구축 하 는 기본 모듈 은 ID,대상 URI,일련의 단언 과 필터 로 구성 되 어 있 으 며,true 라 고 단언 하면 이 경로 와 일치 합 니 다.
    2.2,Predicate 단언
    참고 로 자바 8 의 자바 util.function.Predicate 개발 자 는 HTTP 요청 의 모든 내용(예 를 들 어 요청 헤더 나 요청 매개 변수)을 일치 시 킬 수 있 습 니 다.요청 이 단언 과 일치 하면 경로 가 진 행 됩 니 다. 
    2.3,필터 필터 링
    Spring 프레임 워 크 의 Gateway Filter 인 스 턴 스 를 말 합 니 다.필 터 를 사용 하면 경로 가 요청 되 기 전이 나 그 후에 요청 을 수정 할 수 있 습 니 다.
    2.4 전체
  • 웹 요청 은 일치 하 는 조건 을 통 해 진정한 서비스 노드 를 찾 습 니 다.그리고 이 퍼 가기 과정의 전후 에 정밀 화 된 통 제 를 한다.
  • predicate 는 우리 의 일치 조건 이다.
  • 필 터 는 못 하 는 것 이 없 는 차단기 로 이해 할 수 있다.이 두 가지 요소 가 있 고 목표 uri 를 더 하면 구체 적 인 경로
  • 를 실현 할 수 있다.
    3.Getway 작업 절차
  • 클 라 이언 트 가 Spring Cloud Gatqway 에 요청 합 니 다.그리고 Gateway Handler Mapping 에서 요청 과 일치 하 는 경 로 를 찾 아 Gateway
  • 로 보 냅 니 다.
  • Web Handler。
  • Handler 는 지 정 된 필터 체인 을 통 해 요청 을 실제 서비스 실행 업무 논리 로 보 내 고 되 돌려 줍 니 다.
  • 필터 간 에 점선 으로 나 누 는 것 은 필터 가 프 록 시 요청 을 보 내기 전에("pre")또는 그 다음("post")업무 논 리 를 수행 할 수 있 기 때 문 입 니 다.
  • Filter 는"pre"형식의 필 터 를 매개 변수 검사,권한 검사,데이터 모니터링,로그 출력,프로 토 콜 변환 등 을 할 수 있 습 니 다.
  • 'post'유형의 필터 에서 응답 내용,응답 헤드 의 수정,로그 의 출력,데이터 모니터링 등 매우 중요 한 역할 을 합 니 다.
  • 핵심 논리:루트 전송+실행 필터 체인
  • 입문 배치
    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 의 사용
    역할
  • 루트 필 터 는 들 어 오 는 HTTP 요청 과 되 돌아 오 는 HTTP 응답 을 수정 하 는 데 사 용 됩 니 다.루트 필 터 는 루트 만 지정 해서 사용 할 수 있 습 니 다.
  • Spring Cloud Gateway 에 Y 여러 경로 필터 가 내장 되 어 있 는데 그들 은 모두 Gateway Filter 의 공장 류 에 의 해 생 성 된다
  • .
    7.2,Spring Cloud Gateway 의 Filter
    생명주기
  • pre 요청 전
  • post 요청 후
  • 종류,단 두
  • Gateway Filter 단일
  • GlobalFilter 전역 적
  • 7.3 사용자 정의 필터
    두 개의 인터페이스 소개: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 게 이 트 웨 이에 관 한 자 료 는 저희 의 다른 관련 글 을 주목 해 주 십시오!

    좋은 웹페이지 즐겨찾기