연구 노트 게이트웨이

0 환경

  • 운영 체제 : win10
  • 편집 : 아이디어
  • springcloud 버전 : H 버전

1 소개

환경을 기본 봄 부팅 및 제공 봄 Webflux 인 Netty를 사용하여, 기존 서블릿 컨테이너와 함께 사용할 수 없습니다 봄 클라우드 게이트웨이는 전쟁 패키지로 포장하지.

  • 특징
    • 경로 재 작성
    • 동적 라우팅
    • 제한
    • 集成 springcloud DiscoveryClient
    • 통합 회로 차단기 hystrix
  • 대비
    • 게이트웨이 제품군은 스프링 스프링 제품군의 다른 구성 요소와 원활한 통합입니다
    • zuul 긴 연결을 지원하지 않습니다 (웹 소켓)
    • 게이트웨이의 리소스 집약적 인 자원 업데이트 및 성능 zuul보다 강한 (+ 비동기 비는 차단)
    • 제한

이 개념

  • 이해 개념
    • 루트 ->베이스 부재 (조성 -> ID + URI + + 어서 필터) 게이트웨이 처리기 매핑 주장을 주장하여 행 정합 (맵핑)의 게이트웨이는 게이트웨이의 요청에 해당하는 경우 상기 매칭 도로 (장면 : 듀티 I 오프 나는 특정 방향 주위 현관 문으로 실행에 갔다하지만 온도 총기 위협을 잡고 보안 건물은 약간의 온도가 그것이 다시 건물 잘못하지 않았다 있도록 마스크를 착용해야합니다 보았다 패스 나 (주장) 테스트를 중지 방)
    • 술부
      • java8 HTTP 함수 (매칭 조건)에 일치 요청
    • 필터
      • 일부 서비스 처리 요청 전 / 후

3 게이트웨이 기본 사용법

3.1 만들기 springboot 프로젝트 (게이트웨이)

그림 삽입 설명 여기

3.2 추가 의존성

	  <dependency>
          <groupId>org.springframework.cloud</groupId>
          <artifactId>spring-cloud-starter-gateway</artifactId>
      </dependency>
      <dependency>
          <groupId>org.springframework.cloud</groupId>
          <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
      </dependency>

3.3 YML 配置

우리는 목적지 주소를 방문 http://httpbin.org
그림 삽입 설명 여기

spring:
  cloud:
    gateway:
      routes:
        - id: hi
          uri: http://httpbin.org
          predicates:
            - Path=/get

-이 구성이 권장되지 않습니다 특성 (성가신)
그림 삽입 설명 여기

3.4 빈 시작 클래스 구성

YML 구성 및 효과) (동일

/*    @Bean
    RouteLocator routeLocator(RouteLocatorBuilder builder){
        // 可以添加多个
        return builder.routes()
                // 访问网址 http://httpbin.org/get
                // 通过网关后访问 http://localhost:8080/get
                .route("hi", r -> r.path("/get").uri("http://httpbin.org"))
                .build();
    }*/

3.5 시작 게이트웨이

그림 삽입 설명 여기

서비스 결합 4 마이크로

또는 이전 유레카 서버 및 게이트웨이 공급자를 사용하도록 계속해서
시작 / 재시작을 세 가지 클래스의 시작을 가능하게 나중에 말했다

4.1 YML 配置

spring:
  cloud:
    gateway:
      discovery:
        locator:
          # 开启自动代理
          enabled: true
          # 服务id为true --> 这样小写服务就可访问了
          #lower-case-service-id: true
  application:
    name: gateway

eureka:
  client:
    service-url:
      #      defaultZone: http://localhost:1234/eureka
      defaultZone: http://localhost:8761/eureka

#日志
logging:
  level:
    org.springframework.cloud.gateway:
      debug

4.2 사용

  • 访问 통해 http : // localhost : 8080 / 제공 / 안녕하세요
    그림 삽입 설명 여기
    그림 삽입 설명 여기
    그림 삽입 설명 여기
  • 소문자 서비스
    그림 삽입 설명 여기
    #启用它设为true即可 lower-case-service-id: true
    spring:
      cloud:
        gateway:
          discovery:
            locator:
              # 开启自动代理
              enabled: true
              # 服务id为true --> 这样小写服务就可访问了
              lower-case-service-id: true
      application:
        name: gateway
    
    eureka:
      client:
        service-url:
          #      defaultZone: http://localhost:1234/eureka
          defaultZone: http://localhost:8761/eureka
    
    #日志
    logging:
      level:
        org.springframework.cloud.gateway:
          debug
    
  • 다시 시작 유레카 서버 및 게이트웨이 및 소비자
    그림 삽입 설명 여기
  • 이번 방문에서 자본 서비스를 불평 할 것이다
    그림 삽입 설명 여기

4 단언

4.1 시간의 주장

  • 전에 -> 요청 시간이 특정 시점 이전에 연결됩니다
  • 후 -> 요청 시간이 특정 시점 이후에 연결됩니다
  • 사이 - 두 시점 사이> 요청 시간 (시간 내에 두 지점 구분)
spring:
  cloud:
    gateway:
      routes:
        - id: before_route
          uri: http://www.baidu.com
          # 时间断言
          predicates:
            - Before=2020-03-31T08:38:47+08:00

그림 삽입 설명 여기
若是改为Before=2020-03-24T08:38:47+08:00
그림 삽입 설명 여기

4.2 경로를 주장

경로 = GET의 시작은 추가 반복하지 않는다

spring:
  cloud:
    gateway:
      routes:
        # 路径断言 访问指定地址http://www.w3school.com.cn/tcpip/*
        # 也就是localhost:8080/tcpip/*
        - id: w3c_route
          uri: http://www.w3school.com.cn
          predicates:
            - Path=/tcpip/{segment}
  • 성공적인 방문
    그림 삽입 설명 여기
  • 비 액세스 실패의 경로
    그림 삽입 설명 여기

4.3 쿼리 주장

spring:
  cloud:
    gateway:
      routes:
        # 默认参数
        - id: query_route
          uri: http://httpbin.org
          predicates:
            # 可以指定参数和值 ?name=1开头的值 才允许访问
            - Query=name,1.*
  • 추가 매개 변수가 없습니다
    그림 삽입 설명 여기
  • 성공의 시작에서 플러스 1 개 매개 변수
    그림 삽입 설명 여기
    그림 삽입 설명 여기
  • 실패의 시작에서 플러스 2 개 매개 변수
    그림 삽입 설명 여기

4.4 방법 주장

  • YML 配置
spring:
  cloud:
    gateway:
      routes:
        - id: method_route
          uri: http://httpbin.org
          # 该网站post请求405 --> 没有post 只能用get测试 用post测试get请求404就对了
          predicates:
            - Method=GET
  • POST 요청 (404) (포스트 방법 (405)이 사이트가 요청을 게시하지 않음을 나타냅니다 경우) 성공은 스크린 샷 간다 페이스트 시작하지 않은 경우
    그림 삽입 설명 여기

4.5 주장 병용

spring:
  cloud:
    gateway:
      routes:
        # 组合使用
        - id: many_route
          uri: http://httpbin.org
          predicates:
            # 可以指定参数和值 ?name=1开头的值
            - Query=name,1.*
            - Method=GET
            - After=2020-03-01T08:38:47+08:00

그림 삽입 설명 여기

4.6 사용자 정의 라우팅 주장

  • 구성 사용자 정의 주장 공장
// 自定义路由断言工厂
// 命名需要以RoutePredicateFactory结尾 比aRoutePredicateFactory 那么yml在使用时a就是断言工厂的名字
@Component
public class CheckAuthRoutePredicateFactory extends AbstractRoutePredicateFactory<CheckAuthRoutePredicateFactory.User> {

    public CheckAuthRoutePredicateFactory() {
        super(User.class);
    }

    // 自定义配置类
    @Override
    public Predicate<ServerWebExchange> apply(User config) {
        return exchange -> {
            System.out.println("进入apply:" + config.getName());
            if (config.getName().equals("kitty")){
                return true;
            }
            return false;
        };
    }

    public static class User{
        private String name;

        public String getName() {
            return name;
        }

        public void setName(String name) {
            this.name = name;
        }
    }
}
  • YML 配置
spring:
  cloud:
    gateway:
      routes:
        # 自定义断言工厂 -name就是之前以xxxRoutePredicateFactory的xxxx为断言工厂名
        - id: customer_route
          uri: http://httpbin.org
          predicates:
          - name: CheckAuth
            args:
              name: kitty
  • 때 매개 변수 이름 = 사용자 정의 공장 getName 일관된 주장과 키티
    그림 삽입 설명 여기
  • 매개 변수는 사용자 정의 이름 = 키티 주장 공장 getName과 일치하지 않는 경우
    그림 삽입 설명 여기

필터 (5)

게이트웨이는 카테고리 필터
- GlobalFilter을
- GatewayFilter을

5.1 AddRequestParameter 필터

요청을 추가 할 때 자동으로 추가 매개 변수를 추가
그림 삽입 설명 여기

6 요약

  • 기본 구성 콩 또는 시작 클래스 YML는 경로의 XXX 배열
  • 자동 프록시 설정을 가능하게 유레카 서버의 통합 및 게이트웨이 구성 따라 추가 YML 연결 서비스뿐만 아니라 서비스 제공을 학습하고 민감한 서비스에 액세스 할 때 로그를 설정
  • 학습의 어설
    • 경로 주장 -> URL을 일치
    • 쿼리 주장 -> 매개 변수 매칭 (사용자 정의 매개 변수 필터링 규칙)과 유사한 이름 = xxx는?
    • 방법 주장 - 매칭> HTTP 방법
    • 시간의 주장 -> 후 / / 사이 전
    • 어설 조성물 -> 이러한 주장의 유기적 결합 전
    • 사용자 정의 주장 -> 상속 할 필요는 YML와 일치하도록 구성 AbstractRoutePredicateFactory 사용자 정의 공장을 확장
  • 필터 학습 AddRequestParameter 추가 매개 변수를 추가
게시 76 개 원래 기사 · 원의 찬양 (41) ·은 40000 +를 볼

추천

출처blog.csdn.net/edtwar/article/details/105086450