le mie informazioni di contatto
Posta[email protected]
2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
Spring Cloud Gateway fornisce un gateway API basato sull'ecosistema Spring, tra cui: Spring 5, Spring Boot 2 e Project Reactor. Spring Cloud Gateway mira a fornire un modo semplice ma efficiente di instradamento e fornisce alcune funzionalità di base del gateway come: sicurezza, monitoraggio/metriche e resilienza.
Di seguito lo illustriamo con due esempi:
Versione Spring Boot: 2.2.5.RELEASE
Versione Spring Cloud: Hoxton.SR3
Se non diversamente specificato, tutte le routine Spring Cloud utilizzeranno la versione precedente.
Raccomandazione: prima di iniziare questo corso, se non si comprendono i passaggi dettagliati per creare Eureka, si consiglia di leggere [Scopri come utilizzare il centro di registrazione Eureka di Spring Cloud con un esempio],Non importa se non l'hai ancora visto, segui semplicemente i passaggi seguenti per iniziare:
Se non disponi di un progetto principale (se hai completato l'istanza del centro di registrazione, devi avere un progetto principale), utilizza semplice Maven per creare un progetto principale:
Dopo averlo creato, apri il file pom.xml e aggiungi il seguente codice:
- <?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>
Elimina la cartella src
Nel progetto principale, utilizza Spring Inizializr per creare un nuovo sottoprogetto gateway, gateway, e scegli di dipendere da Gateway. La mappa semplice è la seguente:
Dopo averlo creato, modificare il file pom.xml. Il file modificato è il seguente:
- <?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>
Modificare il file di configurazione application.properties con il suffisso yml (ovvero, modificare il nome del file in application.yml) per configurare il gateway.
Qui utilizziamo il blog CSDN come fornitore di servizi
- server:
- port: 9001
-
- spring:
- application:
- name: gateway
- cloud:
- gateway:
- routes:
- - id: gateway-service
- uri: https://blog.csdn.net
- predicates:
- - Path=/huanzi833
Esegui l'esecuzione, si avvia Tomcat integrato in springboot, porta 9001
Indirizzo di input del browserhttp://localhost:9001/huanzi833
Se desideri che il gateway non sia disponibile, puoi aggiungere le seguenti impostazioni 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
-
Accesso al browser, i risultati sono i seguenti:
Nota: dopo aver modificato il file delle proprietà, riavvia l'applicazione da solo. Non ripeterò le istruzioni ogni volta.
L'instradamento diventa effettivo dopo il tempo impostato da Dopo. Ad esempio: le richieste successive al 1 gennaio 2020 vengono inoltrate al mio blog e le richieste prima di tale orario non possono essere inoltrate.
- 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
-
L'instradamento prima che il tempo impostato da Prima abbia effetto. Ad esempio: le richieste prima del 1 gennaio 2021 vengono inoltrate al mio blog e le richieste successive a tale orario non possono essere inoltrate.
- 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
-
L'instradamento tra gli orari impostati da Between ha effetto. Ad esempio: le richieste tra il 1 gennaio 2020 e il 1 ottobre 2020 vengono inoltrate al mio blog. Le richieste al di fuori di questo orario non possono essere inoltrate Di solito Tra e Dopo e Dopo Prima non verranno utilizzate insieme per evitare impostazioni ripetute.
- 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
-
Per i cookie, i predicati possono ricevere due parametri, uno è il nome del cookie e l'altro è l'espressione regolare. Le regole di instradamento corrisponderanno al valore del nome del cookie corrispondente e all'espressione regolare. Se corrispondono, verrà eseguito il routing. il routing verrà eseguito. Non verrà eseguito.
- 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
-
Utilizzando la corrispondenza del routing dei cookie, possiamo inserire cmd per testare e inserire la seguente istruzione in cmd:
Similmente alla corrispondenza della rotta dei cookie, ci sono anche due parametri, un nome di parametro e un'espressione regolare. Se c'è una corrispondenza, la rotta verrà eseguita. Se non c'è corrispondenza, la rotta non verrà eseguita.
- 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
-
Inserisci cmd per testare, inserisci la seguente istruzione in cmd:
La seguente configurazione corrisponde all'indirizzo host, come www.csdn.net, o www.baidu.com, o blog.csdn.net e altri indirizzi
- 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
-
Inserisci cmd per testare, inserisci la seguente istruzione in 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
-
Immettere cmd per eseguire il test Get. Immettere la seguente istruzione in cmd:
Immettere cmd per eseguire il test POST. Immettere la seguente istruzione in cmd: (Nota: se il percorso nel controller del fornitore di servizi utilizza GetMapping e qui viene utilizzato -X POST durante la chiamata, verrà visualizzato un 404)
il predicato supporta anche il routing impostando una richiesta con un determinato numero di intervallo IP, come 192.168.1.1/24 (dove 192.168.1.1 è l'indirizzo IP, 24 è la maschera di sottorete e 24 qui significa che la maschera di sottorete è 255.255.255.0 ). È possibile impostare questo indirizzo sull'indirizzo IP locale per il 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 corrispondenza del percorso/corrispondenza dei parametri/la corrispondenza del peso verrà completata nell'integrazione con il centro di registrazione riportato di seguito.
1. Per prima cosa creare il centro servizi Eureka, il codice è il seguente: