2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
Spring Cloud Gateway fournit une passerelle API construite sur l'écosystème Spring, comprenant : Spring 5, Spring Boot 2 et Project Reactor. Spring Cloud Gateway vise à fournir un moyen de routage simple mais efficace et leur fournit certaines fonctionnalités de base de la passerelle telles que : la sécurité, la surveillance/métriques et la résilience.
Ci-dessous, nous illustrons avec deux exemples :
Version Spring Boot : 2.2.5.RELEASE
Version Spring Cloud : Hoxton.SR3
Sauf indication contraire, toutes les routines Spring Cloud utiliseront la version ci-dessus.
Recommandation : Avant de commencer ce cours, si vous ne comprenez pas les étapes détaillées de la création d'Eureka, il est recommandé de lire [Apprenez à utiliser le centre d'inscription Eureka de Spring Cloud avec un exemple],Peu importe si vous ne l’avez pas encore vu, suivez simplement les étapes ci-dessous pour commencer :
Si vous n'avez pas de projet parent (si vous avez terminé l'instance du centre d'enregistrement, vous devez avoir un projet parent), veuillez utiliser Maven simple pour créer un projet parent :
Après l'avoir créé, ouvrez le fichier pom.xml et ajoutez le code suivant :
- <?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>
Supprimer le dossier src
Sous le projet parent, utilisez Spring Initializr pour créer un nouveau sous-projet de passerelle, gateway, et choisissez de dépendre de Gateway. La carte simple est la suivante :
Une fois construit, modifiez le fichier pom.xml. Le fichier modifié est le suivant :
- <?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>
Modifiez le fichier de configuration application.properties avec le suffixe yml (c'est-à-dire changez le nom du fichier en application.yml) pour configurer la passerelle.
Ici, nous utilisons le blog csdn comme fournisseur de services
- server:
- port: 9001
-
- spring:
- application:
- name: gateway
- cloud:
- gateway:
- routes:
- - id: gateway-service
- uri: https://blog.csdn.net
- predicates:
- - Path=/huanzi833
Exécuter l'exécution, Springboot intégré Tomcat démarre, port 9001
Adresse d'entrée du navigateurhttp://localhost:9001/huanzi833
Si vous souhaitez que la passerelle soit indisponible, vous pouvez ajouter les paramètres suivants à 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
-
Accès par navigateur, les résultats sont les suivants :
Remarque : Après avoir modifié le fichier de propriétés, veuillez redémarrer l'application vous-même. Je ne répéterai pas les instructions à chaque fois.
Le routage prend effet après l'heure fixée par After. Par exemple : les demandes postérieures au 1er janvier 2020 sont transmises à mon blog, et les demandes antérieures à cette heure ne peuvent pas être transmises.
- 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
-
Le routage avant l'heure fixée par Avant prend effet. Par exemple : les demandes antérieures au 1er janvier 2021 sont transmises à mon blog, et les demandes après cette heure ne peuvent pas être transmises.
- 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
-
Le routage entre les heures fixées par Between prend effet. Par exemple : les demandes entre le 1er janvier 2020 et le 1er octobre 2020 sont transmises à mon blog. Les demandes en dehors de cette heure ne peuvent pas être transmises. Généralement, Between et After et After Before ne seront pas utilisées. ensemble pour éviter des réglages répétés.
- 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
-
Pour Cookie, les prédicats peuvent recevoir deux paramètres, l'un est le nom du Cookie et l'autre est l'expression régulière. Les règles de routage correspondront à la valeur du nom du Cookie correspondante et si elles correspondent, le routage sera exécuté. le routage sera exécuté. Il ne sera pas exécuté.
- 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
-
En utilisant la correspondance de routage des cookies, nous pouvons saisir cmd pour tester et saisir l'instruction suivante dans cmd :
Semblable à la correspondance de route de cookie, il existe également deux paramètres, un nom de paramètre et une expression régulière. S'il y a une correspondance, la route sera exécutée. S'il n'y a pas de correspondance, la route ne sera pas exécutée.
- 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
-
Entrez cmd pour tester, entrez l'instruction suivante dans cmd :
La configuration suivante correspond à l'adresse de l'hôte, telle que www.csdn.net, ou www.baidu.com, ou blog.csdn.net et d'autres adresses
- 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
-
Entrez cmd pour tester, entrez l'instruction suivante dans 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
-
Entrez cmd pour effectuer le test Get. Entrez l'instruction suivante dans cmd :
Entrez cmd pour effectuer le test POST. Entrez l'instruction suivante dans cmd : (Remarque : si le chemin dans le contrôleur du fournisseur de services utilise GetMapping et que -X POST est utilisé ici lors de l'appel, un 404 apparaîtra)
le prédicat prend également en charge le routage en définissant une requête avec un certain numéro d'intervalle IP, tel que 192.168.1.1/24 (où 192.168.1.1 est l'adresse IP, 24 est le masque de sous-réseau et 24 signifie ici que le masque de sous-réseau est 255.255.255.0 ). Vous pouvez définir cette adresse sur l'adresse IP locale à des fins de test.
- 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 correspondance d'itinéraire/la correspondance de paramètres/la correspondance de poids seront complétées dans l'intégration avec le centre d'enregistrement ci-dessous.
1. Créez d’abord le centre de service Eureka, le code est le suivant :