Notas de Estudio de puerta de enlace

0 Medio Ambiente

  • Sistema operativo: win10
  • Editor: idea
  • versión springcloud: versión H

1 Introducción

Primavera Nube Gateway mediante resorte Boot y proporcionado primavera Webflux Netty entorno subyacente, y no puede ser utilizado con el contenedor de Servlet convencional, no empaqueta en un paquete WAR.

  • característica
    • reescritura de ruta
    • enrutamiento dinámico
    • limitando
    • 集成 springcloud DiscoveryClient
    • Integrado hystrix disyuntor
  • contraste
    • la familia de puerta de enlace es una perfecta integración con otros componentes de la familia de primavera primavera
    • zuul no soporta servicios de larga (WebSocket)
    • actualización de recursos que consume muchos recursos de pasarela y el rendimiento es más fuerte que zuul (+ asíncrono no-bloqueo)
    • limitando

2 Concepto

  • Comprensión de conceptos
    • Ruta -> elemento de base (Composición -> ID + URI + + filtro afirmación) de la puerta de enlace a la pasarela de una solicitud para encaminar un emparejado (Mapping) mediante la afirmación de una afirmación gateway Handler Mapping es cierto cuando la ruta coincidente (Escena: fuera de servicio I fui a la puerta y corrió alrededor de una dirección determinada, pero los edificios de seguridad que sostienen amenazadora pistola de mí (afirmación) de prueba se detuvo un poco la temperatura pasa parecía seguro de que llevas una máscara por lo que no fue malo en un conjunto de edificios de espalda una habitación)
    • predicado
      • java8 HTTP solicitud que coincide con una función (condición de coincidencia)
    • filtrar
      • Algunos solicitud de procesamiento de servicio antes / después

Sintaxis 3 de puerta de enlace básico

3.1 Creación de proyecto springboot (puerta de enlace)

Aquí Insertar imagen Descripción

3.2 Agregar la dependencia

	  <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 配置

Visitamos dirección de destino http://httpbin.org
Aquí Insertar imagen Descripción

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

propiedades esta configuración no se recomienda (engorrosos) -
Aquí Insertar imagen Descripción

configuración clase de arranque 3.4 bean

la configuración y el efecto yml es el mismo ()

/*    @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 Inicio de puerta de enlace

Aquí Insertar imagen Descripción

4 servicio combinado micro

O seguir utilizando el anterior proveedor de servidor de puerta de enlace y Eureka y
dijo más tarde que permiten el inicio de las tres clases de arranque / rearranque

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 Habilitar

  • 访问 http: // localhost: 8080 / proveedor / hola
    Aquí Insertar imagen Descripción
    Aquí Insertar imagen Descripción
    Aquí Insertar imagen Descripción
  • Servicio minúsculas
    Aquí Insertar imagen Descripción
    #启用它设为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
    
  • servidor de Eureka reinicio y la puerta de enlace y el consumidor
    Aquí Insertar imagen Descripción
  • En esta visita se quejan los servicios de capital
    Aquí Insertar imagen Descripción

4 afirman

4.1 afirmación Tiempo

  • Antes -> tiempo de solicitud se dirigirá ante un determinado punto en el tiempo
  • Después -> tiempo de solicitud se dirigirá después de un cierto punto en el tiempo
  • Entre -> tiempo petición entre dos puntos de tiempo (dos puntos en el tiempo separados)
spring:
  cloud:
    gateway:
      routes:
        - id: before_route
          uri: http://www.baidu.com
          # 时间断言
          predicates:
            - Before=2020-03-31T08:38:47+08:00

Aquí Insertar imagen Descripción
若是改为Before=2020-03-24T08:38:47+08:00
Aquí Insertar imagen Descripción

4.2 afirma camino

no se repite añadió el comienzo de la ruta = 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}
  • visita exitosa
    Aquí Insertar imagen Descripción
  • El camino del fracaso de no acceso
    Aquí Insertar imagen Descripción

afirmación de 4.3 consulta

spring:
  cloud:
    gateway:
      routes:
        # 默认参数
        - id: query_route
          uri: http://httpbin.org
          predicates:
            # 可以指定参数和值 ?name=1开头的值 才允许访问
            - Query=name,1.*
  • No hay parámetros adicionales
    Aquí Insertar imagen Descripción
  • Más 1 parámetro en el comienzo del éxito
    Aquí Insertar imagen Descripción
    Aquí Insertar imagen Descripción
  • Además de 2 parámetros en el comienzo de la insuficiencia
    Aquí Insertar imagen Descripción

4.4 Método afirmación

  • YML 配置
spring:
  cloud:
    gateway:
      routes:
        - id: method_route
          uri: http://httpbin.org
          # 该网站post请求405 --> 没有post 只能用get测试 用post测试get请求404就对了
          predicates:
            - Method=GET
  • Cuando la solicitud POST 404 (si el método post 405 indica que el sitio no publica una solicitud) el éxito va captura de pantalla no es el comienzo de una pasta
    Aquí Insertar imagen Descripción

4.5 afirmaciones utilizan en combinación

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

Aquí Insertar imagen Descripción

4.6 Custom afirmación de enrutamiento

  • Configuración y personalización de fábrica de la afirmación
// 自定义路由断言工厂
// 命名需要以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
  • Cuando el nombre del parámetro = gatito con la fábrica de encargo getNombre afirmación coherente
    Aquí Insertar imagen Descripción
  • Cuando el parámetro es incompatible con un nombre personalizado = gatito planta afirmación getName
    Aquí Insertar imagen Descripción

filtro de 5

pasarela filtros Tipos
- GlobalFilter
- GatewayFilter

5.1 filtro AddRequestParameter

Añadir automáticamente los parámetros adicionales al añadir petición
Aquí Insertar imagen Descripción

6 Resumen

  • El grano de configuración básica o yml clase de arranque dispuestas en la xxx rutas
  • Aprender proveedor de servicios, así como la integración de Eureka servidor de puerta de enlace y configuración del servicio de conexión Agregar yml dependientes que permite la configuración de proxy automático y establecer el registro cuando se accede a servicios sensibles
  • Afirmación de aprendizaje
    • camino de la afirmación -> coincide con la URL
    • (Reglas de filtrado de parámetros personalizados)> parámetro coincidente similares name = xxx - consulta afirmación?
    • método de afirmación -> HTTP método de coincidencia
    • afirmación tiempo - después> antes / / entre
    • Composición afirmación -> antes de la combinación orgánica de estas afirmaciones
    • afirmación de encargo -> necesidad de heredar extiende fábrica personalizada AbstractRoutePredicateFactory configurado para que coincida con el yml
  • AddRequestParameter aprendizaje filtro de añadir parámetros adicionales
Publicado 76 artículos originales · ganado elogios 41 · Vistas a 40000 +

Supongo que te gusta

Origin blog.csdn.net/edtwar/article/details/105086450
Recomendado
Clasificación