Mi informacion de contacto
Correo[email protected]
2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
Spring Cloud Gateway proporciona una puerta de enlace API construida sobre el ecosistema Spring, que incluye: Spring 5, Spring Boot 2 y Project Reactor. Spring Cloud Gateway tiene como objetivo proporcionar una forma simple pero eficiente de enrutamiento y les brinda algunas características básicas de la puerta de enlace, como: seguridad, monitoreo/métricas y resiliencia.
A continuación lo ilustramos con dos ejemplos:
Versión de Spring Boot: 2.2.5.RELEASE
Versión de Spring Cloud: Hoxton.SR3
A menos que se especifique lo contrario, todas las rutinas de Spring Cloud utilizarán la versión anterior.
Recomendación: antes de comenzar este curso, si no comprende los pasos detallados para crear Eureka, se recomienda leer [Aprenda a utilizar el centro de registro Eureka de Spring Cloud con un ejemplo],No importa si aún no lo has visto, simplemente sigue los pasos a continuación para comenzar:
Si no tiene un proyecto principal (si ha completado la instancia del centro de registro, debe tener un proyecto principal), utilice Maven simple para crear un proyecto principal:
Después de crearlo, abra el archivo pom.xml y agregue el siguiente código:
- <?xml version="1.0" encoding="UTF-8"?>
- <project xmlns="http://maven.apache.org/POM/4.0.0"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
- <modelVersion>4.0.0</modelVersion>
-
- <groupId>org.cherry</groupId>
- <artifactId>springcloudproject</artifactId>
- <version>1.0-SNAPSHOT</version>
-
- <properties>
- <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
- <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
- <java.version>14</java.version>
- <spring-cloud.version>Hoxton.SR3</spring-cloud.version>
- <springboot.version>2.2.5.RELEASE</springboot.version>
- </properties>
- <dependencyManagement>
- <dependencies>
- <dependency>
- <groupId>org.springframework.cloud</groupId>
- <artifactId>spring-cloud-dependencies</artifactId>
- <version>${spring-cloud.version}</version>
- <type>pom</type>
- <scope>import</scope>
- </dependency>
- <dependency>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-dependencies</artifactId>
- <version>${springboot.version}</version>
- <type>pom</type>
- <scope>import</scope>
- </dependency>
- </dependencies>
- </dependencyManagement>
- </project>
Eliminar carpeta src
En el proyecto principal, use Spring Initializr para crear un nuevo subproyecto de puerta de enlace y elija depender de Gateway. El mapa simple es el siguiente:
Una vez creado, modifique el archivo pom.xml. El archivo modificado es el siguiente:
- <?xml version="1.0" encoding="UTF-8"?>
- <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
- <modelVersion>4.0.0</modelVersion>
- <parent>
- <artifactId>springcloudproject</artifactId>
- <groupId>com.cherry</groupId>
- <version>1.0-SNAPSHOT</version>
- <!-- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-starter-parent</artifactId>
- <version>2.2.6.RELEASE</version>
- <relativePath/> <!– lookup parent from repository –>-->
- </parent>
- <groupId>com.cherry</groupId>
- <artifactId>gateway</artifactId>
- <version>0.0.1-SNAPSHOT</version>
- <name>gateway</name>
- <description>Demo project for Spring Boot</description>
-
- <!--<properties>
- <java.version>1.8</java.version>
- <spring-cloud.version>Hoxton.SR3</spring-cloud.version>
- </properties>-->
-
- <dependencies>
- <dependency>
- <groupId>org.springframework.cloud</groupId>
- <artifactId>spring-cloud-starter-gateway</artifactId>
- </dependency>
- <dependency>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-starter-test</artifactId>
- <scope>test</scope>
- <exclusions>
- <exclusion>
- <groupId>org.junit.vintage</groupId>
- <artifactId>junit-vintage-engine</artifactId>
- </exclusion>
- </exclusions>
- </dependency>
- </dependencies>
-
- <dependencyManagement>
- <dependencies>
- <dependency>
- <groupId>org.springframework.cloud</groupId>
- <artifactId>spring-cloud-dependencies</artifactId>
- <version>${spring-cloud.version}</version>
- <type>pom</type>
- <scope>import</scope>
- </dependency>
- </dependencies>
- </dependencyManagement>
-
- <build>
- <plugins>
- <plugin>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-maven-plugin</artifactId>
- </plugin>
- </plugins>
- </build>
-
- </project>
Modifique el archivo de configuración application.properties con el sufijo yml (es decir, cambie el nombre del archivo a application.yml) para configurar la puerta de enlace.
Aquí utilizamos csdn blog como proveedor de servicios.
- server:
- port: 9001
-
- spring:
- application:
- name: gateway
- cloud:
- gateway:
- routes:
- - id: gateway-service
- uri: https://blog.csdn.net
- predicates:
- - Path=/huanzi833
Ejecutar ejecutar, se inicia Tomcat incorporado de Springboot, puerto 9001
Dirección de entrada del navegadorhttp://localhost:9001/huanzi833
Si desea que la puerta de enlace no esté disponible, puede agregar la siguiente configuración a application.yml:
- server:
- port: 9001
-
- spring:
- application:
- name: gateway
- cloud:
- gateway:
- routes:
- - id: gateway-service
- uri: https://blog.csdn.net
- predicates:
- - Path=/huanzi833
- enabled: false
-
Acceso al navegador, los resultados son los siguientes:
Nota: Después de modificar el archivo de propiedades, reinicie la aplicación usted mismo. No repetiré las instrucciones cada vez.
El enrutamiento entra en vigor después del tiempo establecido por Después. Por ejemplo: las solicitudes posteriores al 1 de enero de 2020 se reenvían a mi blog y las solicitudes anteriores a este tiempo no se pueden reenviar.
- server:
- port: 9001
-
- spring:
- application:
- name: gateway
- cloud:
- gateway:
- routes:
- - id: gateway-service
- uri: https://blog.csdn.net
- predicates:
- - Path=/huanzi833
- - After=2020-01-01T00:00:00+08:00[Asia/Shanghai]
- enabled: true
-
El enrutamiento antes de la hora establecida por Antes entra en vigor. Por ejemplo: las solicitudes anteriores al 1 de enero de 2021 se reenvían a mi blog y las solicitudes posteriores a esta hora no se pueden reenviar.
- server:
- port: 9001
-
- spring:
- application:
- name: gateway
- cloud:
- gateway:
- routes:
- - id: gateway-service
- uri: https://blog.csdn.net
- predicates:
- - Path=/huanzi833
- - After=2020-01-01T00:00:00+08:00[Asia/Shanghai]
- - Before=Before=2021-01-01T00:00:00+08:00[Asia/Shanghai]
- enabled: true
-
El enrutamiento entre los horarios establecidos por Between entra en vigor. Por ejemplo: las solicitudes entre el 1 de enero de 2020 y el 1 de octubre de 2020 se reenvían a mi blog. Las solicitudes fuera de este horario no se pueden reenviar. juntos para evitar ajustes repetidos.
- server:
- port: 9001
-
- spring:
- application:
- name: gateway
- cloud:
- gateway:
- routes:
- - id: gateway-service
- uri: https://blog.csdn.net
- predicates:
- - Path=/huanzi833
- # - After=2019-01-01T00:00:00+08:00[Asia/Shanghai]
- # - Before=2021-01-01T00:00:00+08:00[Asia/Shanghai]
- - Between=2020-01-01T00:00:00+08:00[Asia/Shanghai], 2020-10-01T00:00:00+08:00[Asia/Shanghai]
- enabled: true
-
Para Cookie, los predicados pueden recibir dos parámetros, uno es el nombre de la cookie y el otro es la expresión regular. Las reglas de enrutamiento coincidirán con el valor del nombre de la cookie correspondiente y la expresión regular. Si coinciden, se ejecutará el enrutamiento. el enrutamiento se ejecutará.
- server:
- port: 9001
-
- spring:
- application:
- name: gateway
- cloud:
- gateway:
- routes:
- - id: gateway-service
- uri: https://blog.csdn.net
- predicates:
- - Path=/huanzi833
- # - After=2019-01-01T00:00:00+08:00[Asia/Shanghai]
- # - Before=2021-01-01T00:00:00+08:00[Asia/Shanghai]
- - Between=2020-01-01T00:00:00+08:00[Asia/Shanghai], 2020-10-01T00:00:00+08:00[Asia/Shanghai]
- - Cookie=uid, cherry #通过cookie进行路由规则的匹配
- enabled: true
-
Usando la coincidencia de enrutamiento de cookies, podemos ingresar cmd para probar e ingresar la siguiente declaración en cmd:
Similar a la coincidencia de rutas de cookies, también hay dos parámetros, un nombre de parámetro y una expresión regular. Si hay una coincidencia, la ruta se ejecutará. Si no hay ninguna coincidencia, la ruta no se ejecutará.
- server:
- port: 9001
-
- spring:
- application:
- name: gateway
- cloud:
- gateway:
- routes:
- - id: gateway-service
- uri: https://blog.csdn.net
- predicates:
- - Path=/huanzi833
- # - After=2019-01-01T00:00:00+08:00[Asia/Shanghai]
- # - Before=2021-01-01T00:00:00+08:00[Asia/Shanghai]
- - Between=2020-01-01T00:00:00+08:00[Asia/Shanghai], 2020-10-01T00:00:00+08:00[Asia/Shanghai]
- - Cookie=uid, cherry #通过cookie进行路由规则的匹配
- - Header=X-Request-Id, d+ #Header路由规则
- enabled: true
-
Ingrese cmd para probar, ingrese la siguiente declaración en cmd:
La siguiente configuración coincide con la dirección del host, como www.csdn.net, www.baidu.com o blog.csdn.net y otras direcciones.
- server:
- port: 9001
-
- spring:
- application:
- name: gateway
- cloud:
- gateway:
- routes:
- - id: gateway-service
- uri: https://blog.csdn.net
- predicates:
- - Path=/huanzi833
- # - After=2019-01-01T00:00:00+08:00[Asia/Shanghai]
- # - Before=2021-01-01T00:00:00+08:00[Asia/Shanghai]
- - Between=2020-01-01T00:00:00+08:00[Asia/Shanghai], 2020-10-01T00:00:00+08:00[Asia/Shanghai]
- - Cookie=uid, cherry #通过cookie进行路由规则的匹配
- - Header=X-Request-Id, d+ #Header路由规则
- - Host=**.csdn.net, **.baidu.com #Host路由规则
- enabled: true
-
Ingrese cmd para probar, ingrese la siguiente declaración en cmd:
- server:
- port: 9001
-
- spring:
- application:
- name: gateway
- cloud:
- gateway:
- routes:
- - id: gateway-service
- uri: https://blog.csdn.net
- predicates:
- - Path=/huanzi833
- # - After=2019-01-01T00:00:00+08:00[Asia/Shanghai]
- # - Before=2021-01-01T00:00:00+08:00[Asia/Shanghai]
- - Between=2020-01-01T00:00:00+08:00[Asia/Shanghai], 2020-10-01T00:00:00+08:00[Asia/Shanghai]
- - Cookie=uid, cherry #通过cookie进行路由规则的匹配
- - Header=X-Request-Id, d+ #Header路由规则
- - Host=**.csdn.net, **.baidu.com #Host路由规则
- - Method=GET, POST #Method路由规则
- enabled: true
-
Ingrese cmd para realizar la prueba Get. Ingrese la siguiente declaración en cmd:
Ingrese cmd para realizar la prueba POST. Ingrese la siguiente declaración en cmd: (Nota: si la ruta en el controlador del proveedor de servicios usa GetMapping y -X POST se usa aquí al llamar, aparecerá un 404).
El predicado también admite el enrutamiento configurando una solicitud con un determinado número de intervalo de IP, como 192.168.1.1/24 (donde 192.168.1.1 es la dirección IP, 24 es la máscara de subred y 24 aquí significa que la máscara de subred es 255.255.255.0). ). Puede configurar esta dirección como la dirección IP local para realizar pruebas.
- server:
- port: 9001
-
- spring:
- application:
- name: gateway
- cloud:
- gateway:
- routes:
- - id: gateway-service
- uri: https://blog.csdn.net
- predicates:
- - Path=/huanzi833
- # - After=2019-01-01T00:00:00+08:00[Asia/Shanghai]
- # - Before=2021-01-01T00:00:00+08:00[Asia/Shanghai]
- - Between=2020-01-01T00:00:00+08:00[Asia/Shanghai], 2020-10-01T00:00:00+08:00[Asia/Shanghai]
- - Cookie=uid, cherry #通过cookie进行路由规则的匹配
- - Header=X-Request-Id, d+ #Header路由规则
- - Host=**.csdn.net, **.baidu.com #Host路由规则
- - Method=GET, POST #Method路由规则
- - RemoteAddr=192.168.1.1/24
- enabled: true
-
La coincidencia de ruta de ruta/coincidencia de parámetros/coincidencia de peso se completará en la integración con el centro de registro a continuación.
1. Primero crea el centro de servicio Eureka, el código es el siguiente: