Κοινή χρήση τεχνολογίας

[Οδηγός Spring Cloud Elite] Σε βάθος εξερεύνηση και πρακτική μάχη: Προηγμένες εφαρμογές και βέλτιστες πρακτικές πύλης

2024-07-12

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

1. Εισαγωγή

Το Spring Cloud Gateway παρέχει μια πύλη API χτισμένη πάνω στο οικοσύστημα Spring, συμπεριλαμβανομένων: Spring 5, Spring Boot 2 και Project Reactor. Το Spring Cloud Gateway στοχεύει να παρέχει έναν απλό αλλά αποτελεσματικό τρόπο δρομολόγησης και τους παρέχει ορισμένα βασικά χαρακτηριστικά της πύλης όπως: ασφάλεια, παρακολούθηση/μετρήσεις και ανθεκτικότητα.

Παρακάτω παρουσιάζουμε δύο παραδείγματα:

2. Σημειώσεις Έκδοσης

Έκδοση Spring Boot: 2.2.5.RELEASE

Έκδοση Spring Cloud: Hoxton.SR3

Εκτός εάν ορίζεται διαφορετικά, όλες οι ρουτίνες Spring Cloud θα χρησιμοποιούν την παραπάνω έκδοση.

3. Χρήση πύλης

Σύσταση: Πριν ξεκινήσετε αυτό το μάθημα, εάν δεν καταλαβαίνετε τα λεπτομερή βήματα δημιουργίας του Eureka, συνιστάται να διαβάσετε [Μάθετε πώς να χρησιμοποιείτε το κέντρο εγγραφής Eureka του Spring Cloud με ένα παράδειγμα],Δεν έχει σημασία αν δεν το έχετε δει ακόμα, απλώς ακολουθήστε τα παρακάτω βήματα για να ξεκινήσετε:

3.1 Δημιουργήστε ένα νέο γονικό έργο

Εάν δεν έχετε γονικό έργο (αν έχετε ολοκληρώσει την παρουσία του κέντρου εγγραφής, πρέπει να έχετε ένα γονικό έργο), χρησιμοποιήστε το απλό Maven για να δημιουργήσετε ένα γονικό έργο:

Αφού το δημιουργήσετε, ανοίξτε το αρχείο pom.xml και προσθέστε τον ακόλουθο κώδικα:

  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

3.2 Δημιουργία υποέργου πύλης

Στο μητρικό έργο, χρησιμοποιήστε το Spring Initializr για να δημιουργήσετε ένα νέο υποέργο πύλης, και επιλέξτε να εξαρτηθείτε από το Gateway Ο απλός χάρτης είναι ο εξής:

Αφού δημιουργηθεί, τροποποιήστε το αρχείο pom.xml Το τροποποιημένο αρχείο έχει ως εξής:

  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>

Τροποποιήστε το αρχείο διαμόρφωσης application.properties με το επίθημα yml (δηλαδή, αλλάξτε το όνομα αρχείου σε application.yml) για να ρυθμίσετε τις παραμέτρους της πύλης.

Εδώ χρησιμοποιούμε το csdn blog ως πάροχο υπηρεσιών

  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

Εκτέλεση εκτέλεσης, εκκίνηση ενσωματωμένης εκκίνησης Tomcat, θύρα 9001

Διεύθυνση εισαγωγής προγράμματος περιήγησηςhttp://localhost:9001/huanzi833

3.3 Κλείστε την πύλη

Εάν θέλετε η πύλη να μην είναι διαθέσιμη, μπορείτε να προσθέσετε τις ακόλουθες ρυθμίσεις στο application.yml:

  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

Πρόσβαση στο πρόγραμμα περιήγησης, τα αποτελέσματα είναι τα εξής:

4. Αντιστοιχίστε τους κανόνες δρομολόγησης ανά ώρα

Σημείωση: Αφού τροποποιήσετε το αρχείο ιδιοτήτων, κάντε επανεκκίνηση της εφαρμογής μόνοι σας, δεν θα επαναλαμβάνω τις οδηγίες κάθε φορά.

4.1 Χρόνος Μετά την αντιστοίχιση διαδρομής

Η δρομολόγηση τίθεται σε ισχύ μετά την ώρα που έχει οριστεί από το After. Για παράδειγμα: τα αιτήματα μετά την 1η Ιανουαρίου 2020 προωθούνται στο ιστολόγιό μου και τα αιτήματα πριν από αυτήν την ώρα δεν μπορούν να προωθηθούν.

  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 Χρόνος πριν την αντιστοίχιση δρομολόγησης

Δρομολόγηση πριν από την ώρα που έχει οριστεί από την έναρξη ισχύος Για παράδειγμα: τα αιτήματα πριν από την 1η Ιανουαρίου 2021 προωθούνται στο ιστολόγιό μου και τα αιτήματα μετά από αυτήν την ώρα δεν μπορούν να προωθηθούν.

  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 Χρόνος μεταξύ αντιστοίχισης διαδρομής

Η δρομολόγηση μεταξύ των χρόνων που ορίζονται από το Between τίθεται σε ισχύ. Για παράδειγμα: τα αιτήματα μεταξύ 1ης Ιανουαρίου 2020 και 1 Οκτωβρίου 2020 προωθούνται στο ιστολόγιό μου μαζί για να αποφύγετε τις επαναλαμβανόμενες ρυθμίσεις.

  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

Για το Cookie, τα κατηγορήματα μπορούν να λάβουν δύο παραμέτρους, η μία είναι το όνομα cookie και η άλλη είναι κανονική έκφραση. δρομολόγηση θα εκτελεστεί Δεν θα εκτελεστεί.

  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

Χρησιμοποιώντας την αντιστοίχιση δρομολόγησης cookie, μπορούμε να εισάγουμε cmd για δοκιμή και να εισάγουμε την ακόλουθη δήλωση στο cmd:

4.5 Αντιστοίχιση διαδρομής κεφαλίδας

Παρόμοια με την αντιστοίχιση διαδρομής cookie, υπάρχουν επίσης δύο παράμετροι, ένα όνομα παραμέτρου και μια κανονική έκφραση, εάν δεν υπάρχει αντιστοίχιση, η διαδρομή δεν θα εκτελεστεί.

  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

Εισαγάγετε cmd για δοκιμή, πληκτρολογήστε την ακόλουθη δήλωση στο cmd:

4.6 Αντιστοίχιση διαδρομής κεντρικού υπολογιστή

Η ακόλουθη διαμόρφωση αντιστοιχίζεται με τη διεύθυνση κεντρικού υπολογιστή, όπως www.csdn.net ή www.baidu.com ή blog.csdn.net και άλλες διευθύνσεις

  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

Εισαγάγετε cmd για δοκιμή, πληκτρολογήστε την ακόλουθη δήλωση στο cmd:

4.7 Διαδρομή αντιστοίχισης μεθόδων

  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

Εισαγάγετε cmd για να εκτελέσετε τη δοκιμή Get Εισαγάγετε την ακόλουθη πρόταση στο cmd:

Εισαγάγετε cmd για να εκτελέσετε τη δοκιμή POST Εισαγάγετε την ακόλουθη δήλωση στο cmd: (Σημείωση: Εάν η διαδρομή στον ελεγκτή παρόχου υπηρεσιών χρησιμοποιεί το GetMapping και το -X POST χρησιμοποιείται εδώ κατά την κλήση, θα εμφανιστεί ένα 404).

4.8 Ταίριασμα διευθύνσεων IP

Το κατηγόρημα υποστηρίζει επίσης δρομολόγηση ορίζοντας ένα αίτημα με συγκεκριμένο αριθμό διαστήματος IP, όπως 192.168.1.1/24 (όπου 192.168.1.1 είναι η διεύθυνση IP, 24 είναι η μάσκα υποδικτύου και 24 εδώ σημαίνει ότι η μάσκα υποδικτύου είναι 255.255.255.0 ). Μπορείτε να ορίσετε αυτήν τη διεύθυνση στην τοπική διεύθυνση IP για δοκιμή.

  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

Η αντιστοίχιση διαδρομής διαδρομής/αντιστοιχία παραμέτρων/αντιστοιχία βάρους θα ολοκληρωθεί στην ενοποίηση με το παρακάτω κέντρο εγγραφής.

5. Κάντε την πύλη υπηρεσία και συσχετίστε την με το κέντρο εγγραφής, τους παρόχους υπηρεσιών και τους καταναλωτές

1. Πρώτα δημιουργήστε το κέντρο εξυπηρέτησης Eureka, ο κωδικός είναι ο εξής: