Technologieaustausch

[Spring Cloud Elite Guide] Ausführliche Erkundung und praktischer Kampf: Erweiterte Anwendungen und Best Practices des Gateways

2024-07-12

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

1. Einleitung

Spring Cloud Gateway bietet ein API-Gateway, das auf dem Spring-Ökosystem aufbaut, einschließlich: Spring 5, Spring Boot 2 und Project Reactor. Spring Cloud Gateway zielt darauf ab, eine einfache, aber effiziente Art des Routings bereitzustellen und stellt ihnen einige grundlegende Gateway-Funktionen zur Verfügung, wie z. B. Sicherheit, Überwachung/Metriken und Ausfallsicherheit.

Nachfolgend veranschaulichen wir dies anhand zweier Beispiele:

2. Versionshinweise

Spring Boot-Version: 2.2.5.RELEASE

Spring Cloud-Version: Hoxton.SR3

Sofern nicht anders angegeben, verwenden alle Spring Cloud-Routinen die obige Version.

3. Nutzung des Gateways

Empfehlung: Wenn Sie vor Beginn dieses Kurses die detaillierten Schritte zur Erstellung von Eureka nicht verstehen, wird empfohlen, [Erfahren Sie anhand eines Beispiels, wie Sie das Registrierungszentrum Eureka von Spring Cloud nutzen.Es spielt keine Rolle, ob Sie es noch nicht gesehen haben. Befolgen Sie einfach die folgenden Schritte, um loszulegen:

3.1 Erstellen Sie ein neues übergeordnetes Projekt

Wenn Sie kein übergeordnetes Projekt haben (wenn Sie die Registrierungscenter-Instanz abgeschlossen haben, müssen Sie über ein übergeordnetes Projekt verfügen), verwenden Sie bitte einfachen Maven, um ein übergeordnetes Projekt zu erstellen:

Öffnen Sie nach der Erstellung die Datei pom.xml und fügen Sie den folgenden Code hinzu:

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <project xmlns="http://maven.apache.org/POM/4.0.0"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  5. <modelVersion>4.0.0</modelVersion>
  6. <groupId>org.cherry</groupId>
  7. <artifactId>springcloudproject</artifactId>
  8. <version>1.0-SNAPSHOT</version>
  9. <properties>
  10. <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  11. <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
  12. <java.version>14</java.version>
  13. <spring-cloud.version>Hoxton.SR3</spring-cloud.version>
  14. <springboot.version>2.2.5.RELEASE</springboot.version>
  15. </properties>
  16. <dependencyManagement>
  17. <dependencies>
  18. <dependency>
  19. <groupId>org.springframework.cloud</groupId>
  20. <artifactId>spring-cloud-dependencies</artifactId>
  21. <version>${spring-cloud.version}</version>
  22. <type>pom</type>
  23. <scope>import</scope>
  24. </dependency>
  25. <dependency>
  26. <groupId>org.springframework.boot</groupId>
  27. <artifactId>spring-boot-dependencies</artifactId>
  28. <version>${springboot.version}</version>
  29. <type>pom</type>
  30. <scope>import</scope>
  31. </dependency>
  32. </dependencies>
  33. </dependencyManagement>
  34. </project>

Src-Ordner löschen

3.2 Gateway-Teilprojekt erstellen

Erstellen Sie unter dem übergeordneten Projekt mit Spring Initializr ein neues Gateway-Unterprojekt, Gateway, und wählen Sie die Abhängigkeit vom Gateway aus. Die einfache Zuordnung lautet wie folgt:

Ändern Sie nach dem Erstellen die Datei pom.xml. Die geänderte Datei lautet wie folgt:

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  3. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
  4. <modelVersion>4.0.0</modelVersion>
  5. <parent>
  6. <artifactId>springcloudproject</artifactId>
  7. <groupId>com.cherry</groupId>
  8. <version>1.0-SNAPSHOT</version>
  9. <!-- <groupId>org.springframework.boot</groupId>
  10. <artifactId>spring-boot-starter-parent</artifactId>
  11. <version>2.2.6.RELEASE</version>
  12. <relativePath/> &lt;!&ndash; lookup parent from repository &ndash;&gt;-->
  13. </parent>
  14. <groupId>com.cherry</groupId>
  15. <artifactId>gateway</artifactId>
  16. <version>0.0.1-SNAPSHOT</version>
  17. <name>gateway</name>
  18. <description>Demo project for Spring Boot</description>
  19. <!--<properties>
  20. <java.version>1.8</java.version>
  21. <spring-cloud.version>Hoxton.SR3</spring-cloud.version>
  22. </properties>-->
  23. <dependencies>
  24. <dependency>
  25. <groupId>org.springframework.cloud</groupId>
  26. <artifactId>spring-cloud-starter-gateway</artifactId>
  27. </dependency>
  28. <dependency>
  29. <groupId>org.springframework.boot</groupId>
  30. <artifactId>spring-boot-starter-test</artifactId>
  31. <scope>test</scope>
  32. <exclusions>
  33. <exclusion>
  34. <groupId>org.junit.vintage</groupId>
  35. <artifactId>junit-vintage-engine</artifactId>
  36. </exclusion>
  37. </exclusions>
  38. </dependency>
  39. </dependencies>
  40. <dependencyManagement>
  41. <dependencies>
  42. <dependency>
  43. <groupId>org.springframework.cloud</groupId>
  44. <artifactId>spring-cloud-dependencies</artifactId>
  45. <version>${spring-cloud.version}</version>
  46. <type>pom</type>
  47. <scope>import</scope>
  48. </dependency>
  49. </dependencies>
  50. </dependencyManagement>
  51. <build>
  52. <plugins>
  53. <plugin>
  54. <groupId>org.springframework.boot</groupId>
  55. <artifactId>spring-boot-maven-plugin</artifactId>
  56. </plugin>
  57. </plugins>
  58. </build>
  59. </project>

Ändern Sie die Konfigurationsdatei application.properties mit dem Suffix yml (ändern Sie also den Dateinamen in application.yml), um das Gateway zu konfigurieren.

Hier nutzen wir csdn blog als Dienstleister

  1. server:
  2. port: 9001
  3. spring:
  4. application:
  5. name: gateway
  6. cloud:
  7. gateway:
  8. routes:
  9. - id: gateway-service
  10. uri: https://blog.csdn.net
  11. predicates:
  12. - Path=/huanzi833

Ausführen, Springboot-integrierter Tomcat startet, Port 9001

Browser-Eingabeadressehttp://localhost:9001/huanzi833

3.3 Schließen Sie das Gateway

Wenn Sie möchten, dass das Gateway nicht verfügbar ist, können Sie application.yml die folgenden Einstellungen hinzufügen:

  1. server:
  2. port: 9001
  3. spring:
  4. application:
  5. name: gateway
  6. cloud:
  7. gateway:
  8. routes:
  9. - id: gateway-service
  10. uri: https://blog.csdn.net
  11. predicates:
  12. - Path=/huanzi833
  13. enabled: false

Browserzugriff, die Ergebnisse sind wie folgt:

4. Passen Sie die Routing-Regeln zeitlich an

Hinweis: Nachdem Sie die Eigenschaftendatei geändert haben, starten Sie die Anwendung bitte selbst neu. Ich werde die Anweisungen nicht jedes Mal wiederholen.

4.1 Zeit nach Routenanpassung

Die Weiterleitung wird nach der durch After festgelegten Zeit wirksam. Beispielsweise werden Anfragen nach dem 1. Januar 2020 an meinen Blog weitergeleitet, Anfragen vor diesem Zeitpunkt können nicht weitergeleitet werden.

  1. server:
  2. port: 9001
  3. spring:
  4. application:
  5. name: gateway
  6. cloud:
  7. gateway:
  8. routes:
  9. - id: gateway-service
  10. uri: https://blog.csdn.net
  11. predicates:
  12. - Path=/huanzi833
  13. - After=2020-01-01T00:00:00+08:00[Asia/Shanghai]
  14. enabled: true

4.2 Zeit vor dem Routing-Matching

Routing vor dem in „Before“ festgelegten Zeitpunkt. Beispiel: Anfragen vor dem 1. Januar 2021 werden an meinen Blog weitergeleitet, Anfragen nach diesem Zeitpunkt können nicht weitergeleitet werden.

  1. server:
  2. port: 9001
  3. spring:
  4. application:
  5. name: gateway
  6. cloud:
  7. gateway:
  8. routes:
  9. - id: gateway-service
  10. uri: https://blog.csdn.net
  11. predicates:
  12. - Path=/huanzi833
  13. - After=2020-01-01T00:00:00+08:00[Asia/Shanghai]
  14. - Before=Before=2021-01-01T00:00:00+08:00[Asia/Shanghai]
  15. enabled: true

4.3 Zeit zwischen Routenabgleich

Die Weiterleitung zwischen den durch „Between“ festgelegten Zeiten tritt zum Beispiel in Kraft: Anfragen zwischen dem 1. Januar 2020 und dem 1. Oktober 2020 werden an meinen Blog weitergeleitet. Anfragen außerhalb dieser Zeit können normalerweise nicht weitergeleitet werden zusammen, um wiederholte Einstellungen zu vermeiden.

  1. server:
  2. port: 9001
  3. spring:
  4. application:
  5. name: gateway
  6. cloud:
  7. gateway:
  8. routes:
  9. - id: gateway-service
  10. uri: https://blog.csdn.net
  11. predicates:
  12. - Path=/huanzi833
  13. # - After=2019-01-01T00:00:00+08:00[Asia/Shanghai]
  14. # - Before=2021-01-01T00:00:00+08:00[Asia/Shanghai]
  15. - Between=2020-01-01T00:00:00+08:00[Asia/Shanghai], 2020-10-01T00:00:00+08:00[Asia/Shanghai]
  16. enabled: true

4.4 Cookie-Routenabgleich

Für Cookies können Prädikate zwei Parameter erhalten, einer ist der Cookie-Name und der andere ist ein regulärer Ausdruck. Wenn sie übereinstimmen, wird das Routing ausgeführt. Routing wird ausgeführt. Es wird nicht ausgeführt.

  1. server:
  2. port: 9001
  3. spring:
  4. application:
  5. name: gateway
  6. cloud:
  7. gateway:
  8. routes:
  9. - id: gateway-service
  10. uri: https://blog.csdn.net
  11. predicates:
  12. - Path=/huanzi833
  13. # - After=2019-01-01T00:00:00+08:00[Asia/Shanghai]
  14. # - Before=2021-01-01T00:00:00+08:00[Asia/Shanghai]
  15. - Between=2020-01-01T00:00:00+08:00[Asia/Shanghai], 2020-10-01T00:00:00+08:00[Asia/Shanghai]
  16. - Cookie=uid, cherry #通过cookie进行路由规则的匹配
  17. enabled: true

Mithilfe des Cookie-Routing-Matchings können wir zum Testen cmd eingeben und die folgende Anweisung in cmd eingeben:

4.5 Header-Routenabgleich

Ähnlich wie beim Cookie-Routenabgleich gibt es auch zwei Parameter, einen Parameternamen und einen regulären Ausdruck. Wenn eine Übereinstimmung vorliegt, wird die Route ausgeführt. Wenn keine Übereinstimmung vorliegt, wird die Route nicht ausgeführt.

  1. server:
  2. port: 9001
  3. spring:
  4. application:
  5. name: gateway
  6. cloud:
  7. gateway:
  8. routes:
  9. - id: gateway-service
  10. uri: https://blog.csdn.net
  11. predicates:
  12. - Path=/huanzi833
  13. # - After=2019-01-01T00:00:00+08:00[Asia/Shanghai]
  14. # - Before=2021-01-01T00:00:00+08:00[Asia/Shanghai]
  15. - Between=2020-01-01T00:00:00+08:00[Asia/Shanghai], 2020-10-01T00:00:00+08:00[Asia/Shanghai]
  16. - Cookie=uid, cherry #通过cookie进行路由规则的匹配
  17. - Header=X-Request-Id, d+ #Header路由规则
  18. enabled: true

Geben Sie zum Testen cmd ein und geben Sie die folgende Anweisung in cmd ein:

4.6 Host-Routenabgleich

Die folgende Konfiguration entspricht der Hostadresse, z. B. www.csdn.net, www.baidu.com oder blog.csdn.net und anderen Adressen

  1. server:
  2. port: 9001
  3. spring:
  4. application:
  5. name: gateway
  6. cloud:
  7. gateway:
  8. routes:
  9. - id: gateway-service
  10. uri: https://blog.csdn.net
  11. predicates:
  12. - Path=/huanzi833
  13. # - After=2019-01-01T00:00:00+08:00[Asia/Shanghai]
  14. # - Before=2021-01-01T00:00:00+08:00[Asia/Shanghai]
  15. - Between=2020-01-01T00:00:00+08:00[Asia/Shanghai], 2020-10-01T00:00:00+08:00[Asia/Shanghai]
  16. - Cookie=uid, cherry #通过cookie进行路由规则的匹配
  17. - Header=X-Request-Id, d+ #Header路由规则
  18. - Host=**.csdn.net, **.baidu.com #Host路由规则
  19. enabled: true

Geben Sie zum Testen cmd ein und geben Sie die folgende Anweisung in cmd ein:

4.7 Methodenanpassungsroute

  1. server:
  2. port: 9001
  3. spring:
  4. application:
  5. name: gateway
  6. cloud:
  7. gateway:
  8. routes:
  9. - id: gateway-service
  10. uri: https://blog.csdn.net
  11. predicates:
  12. - Path=/huanzi833
  13. # - After=2019-01-01T00:00:00+08:00[Asia/Shanghai]
  14. # - Before=2021-01-01T00:00:00+08:00[Asia/Shanghai]
  15. - Between=2020-01-01T00:00:00+08:00[Asia/Shanghai], 2020-10-01T00:00:00+08:00[Asia/Shanghai]
  16. - Cookie=uid, cherry #通过cookie进行路由规则的匹配
  17. - Header=X-Request-Id, d+ #Header路由规则
  18. - Host=**.csdn.net, **.baidu.com #Host路由规则
  19. - Method=GET, POST #Method路由规则
  20. enabled: true

Geben Sie cmd ein, um den Get-Test durchzuführen. Geben Sie die folgende Anweisung in cmd ein:

Geben Sie cmd ein, um den POST-Test durchzuführen: (Hinweis: Wenn der Pfad im Service-Provider-Controller GetMapping verwendet und hier beim Aufruf -X POST verwendet wird, wird ein 404 angezeigt.)

4.8 IP-Adressabgleich

Das Prädikat unterstützt auch das Routing, indem es eine Anfrage mit einer bestimmten IP-Intervallnummer festlegt, z. B. 192.168.1.1/24 (wobei 192.168.1.1 die IP-Adresse ist, 24 die Subnetzmaske ist und 24 hier bedeutet, dass die Subnetzmaske 255.255.255.0 ist). ). Sie können diese Adresse zu Testzwecken auf die lokale IP-Adresse einstellen.

  1. server:
  2. port: 9001
  3. spring:
  4. application:
  5. name: gateway
  6. cloud:
  7. gateway:
  8. routes:
  9. - id: gateway-service
  10. uri: https://blog.csdn.net
  11. predicates:
  12. - Path=/huanzi833
  13. # - After=2019-01-01T00:00:00+08:00[Asia/Shanghai]
  14. # - Before=2021-01-01T00:00:00+08:00[Asia/Shanghai]
  15. - Between=2020-01-01T00:00:00+08:00[Asia/Shanghai], 2020-10-01T00:00:00+08:00[Asia/Shanghai]
  16. - Cookie=uid, cherry #通过cookie进行路由规则的匹配
  17. - Header=X-Request-Id, d+ #Header路由规则
  18. - Host=**.csdn.net, **.baidu.com #Host路由规则
  19. - Method=GET, POST #Method路由规则
  20. - RemoteAddr=192.168.1.1/24
  21. enabled: true

Der Pfadroutenabgleich/Parameterabgleich/Gewichtsabgleich wird in der Integration mit dem Registrierungszentrum unten abgeschlossen.

5. Machen Sie das Gateway zu einem Dienst und verknüpfen Sie es mit dem Registrierungszentrum, Dienstanbietern und Verbrauchern

1. Erstellen Sie zunächst das Servicecenter Eureka. Der Code lautet wie folgt: