informasi kontak saya
Surat[email protected]
2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
Spring Cloud Gateway menyediakan gateway API yang dibangun di atas ekosistem Spring, termasuk: Spring 5, Spring Boot 2, dan Project Reactor. Spring Cloud Gateway bertujuan untuk menyediakan cara perutean yang sederhana namun efisien dan memberi mereka beberapa fitur dasar gateway seperti: keamanan, pemantauan/metrik, dan ketahanan.
Di bawah ini kami ilustrasikan dengan dua contoh:
Versi Boot Musim Semi: 2.2.5.RELEASE
Versi Spring Cloud: Hoxton.SR3
Kecuali ditentukan lain, semua rutinitas Spring Cloud akan menggunakan versi di atas.
Rekomendasi: Sebelum memulai kursus ini, jika Anda belum memahami langkah detail pembuatan Eureka, disarankan untuk membaca [Pelajari cara menggunakan pusat pendaftaran Spring Cloud Eureka dengan contoh],Tidak masalah jika Anda belum melihatnya, cukup ikuti langkah-langkah di bawah ini untuk memulai:
Jika Anda tidak memiliki proyek induk (jika Anda telah menyelesaikan instance pusat pendaftaran, Anda harus memiliki proyek induk), silakan gunakan Maven sederhana untuk membuat proyek induk:
Setelah membuatnya, buka file pom.xml dan tambahkan kode berikut:
- <?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>
Hapus folder src
Di bawah proyek induk, gunakan Spring Initializr untuk membuat subproyek gateway baru, gateway, dan pilih untuk bergantung pada Gateway Peta sederhananya adalah sebagai berikut:
Setelah dibuat, modifikasi file pom.xml. File yang dimodifikasi adalah sebagai berikut:
- <?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>
Ubah file konfigurasi application.properties dengan akhiran yml (yaitu, ubah nama file menjadi application.yml) untuk mengonfigurasi gateway.
Disini kami menggunakan csdn blog sebagai penyedia layanan
- server:
- port: 9001
-
- spring:
- application:
- name: gateway
- cloud:
- gateway:
- routes:
- - id: gateway-service
- uri: https://blog.csdn.net
- predicates:
- - Path=/huanzi833
Jalankan proses, Tomcat bawaan springboot dimulai, port 9001
Alamat masukan perambanhttp://host lokal:9001/huanzi833
Jika Anda ingin gateway tidak tersedia, Anda dapat menambahkan pengaturan berikut ke 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
-
Akses browser, hasilnya sebagai berikut:
Catatan: Setelah memodifikasi file properti, silakan restart sendiri aplikasinya. Saya tidak akan mengulangi instruksinya setiap saat.
Perutean berlaku setelah waktu yang ditentukan oleh Setelah. Misalnya: permintaan setelah 1 Januari 2020 diteruskan ke blog saya, dan permintaan sebelum waktu tersebut tidak dapat diteruskan.
- 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
-
Perutean sebelum waktu yang ditentukan oleh Sebelum berlaku. Misalnya: permintaan sebelum 1 Januari 2021 diteruskan ke blog saya, dan permintaan setelah waktu tersebut tidak dapat diteruskan.
- 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
-
Perutean antara waktu yang ditentukan oleh Antara berlaku. Misalnya: permintaan antara 1 Januari 2020 hingga 1 Oktober 2020 diteruskan ke blog saya. Permintaan di luar waktu tersebut tidak dapat diteruskan. Biasanya Antara dan Setelah dan Setelah Sebelum tidak akan digunakan bersama-sama untuk menghindari pengaturan berulang.
- 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
-
Untuk Cookie, predikat dapat menerima dua parameter, satu adalah nama Cookie dan yang lainnya adalah ekspresi reguler. Aturan perutean akan cocok dengan nilai nama Cookie yang sesuai dan ekspresi reguler. perutean akan dieksekusi.
- 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
-
Dengan menggunakan pencocokan perutean Cookie, kita dapat memasukkan cmd untuk menguji dan memasukkan pernyataan berikut dalam cmd:
Mirip dengan pencocokan rute Cookie, ada juga dua parameter, nama parameter dan ekspresi reguler. Jika ada yang cocok, rute akan dieksekusi.
- 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
-
Masukkan cmd untuk menguji, masukkan pernyataan berikut di cmd:
Konfigurasi berikut dicocokkan dengan alamat host, seperti www.csdn.net, atau www.baidu.com, atau blog.csdn.net dan alamat lainnya
- 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
-
Masukkan cmd untuk menguji, masukkan pernyataan berikut di 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
-
Masukkan cmd untuk melakukan tes Dapatkan. Masukkan pernyataan berikut dalam cmd:
Masukkan cmd untuk melakukan tes POST. Masukkan pernyataan berikut dalam cmd: (Catatan: Jika jalur di pengontrol penyedia layanan menggunakan GetMapping, dan -X POST digunakan di sini saat memanggil, 404 akan muncul)
predikatnya juga mendukung routing dengan mengatur permintaan dengan nomor interval IP tertentu, seperti 192.168.1.1/24 (di mana 192.168.1.1 adalah alamat IP, 24 adalah subnet mask, dan 24 di sini berarti subnet masknya adalah 255.255.255.0 ). Anda dapat mengatur alamat ini ke alamat IP lokal untuk pengujian.
- 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
-
Pencocokan rute jalur/pencocokan parameter/pencocokan bobot akan diselesaikan dalam integrasi dengan pusat pendaftaran di bawah.
1. Pertama buat service center Eureka, kodenya sebagai berikut :