minhas informações de contato
Correspondência[email protected]
2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
Spring Cloud Gateway fornece um gateway de API construído sobre o ecossistema Spring, incluindo: Spring 5, Spring Boot 2 e Project Reactor. Spring Cloud Gateway visa fornecer uma forma simples, mas eficiente de roteamento e fornece alguns recursos básicos de gateway, como: segurança, monitoramento/métricas e resiliência.
Abaixo ilustramos com dois exemplos:
Versão do Spring Boot: 2.2.5.RELEASE
Versão Spring Cloud: Hoxton.SR3
A menos que especificado de outra forma, todas as rotinas do Spring Cloud usarão a versão acima.
Recomendação: Antes de iniciar este curso, se você não entender as etapas detalhadas da criação do Eureka, é recomendável ler [Aprenda como usar o centro de registro Eureka do Spring Cloud com um exemplo],Não importa se você ainda não viu, basta seguir os passos abaixo para começar:
Se você não tiver um projeto pai (se tiver concluído a instância do centro de registro, deverá ter um projeto pai), use o Maven simples para criar um projeto pai:
Após criá-lo, abra o arquivo pom.xml e adicione o seguinte código:
- <?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>
Excluir pasta src
No projeto pai, use Spring Initializr para criar um novo subprojeto de gateway, gateway, e escolha depender do Gateway. O mapa simples é o seguinte:
Após a construção, modifique o arquivo pom.xml. O arquivo modificado é o seguinte:
- <?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>
Modifique o arquivo de configuração application.properties com o sufixo yml (ou seja, altere o nome do arquivo para application.yml) para configurar o gateway.
Aqui usamos o csdn blog como provedor de serviços
- server:
- port: 9001
-
- spring:
- application:
- name: gateway
- cloud:
- gateway:
- routes:
- - id: gateway-service
- uri: https://blog.csdn.net
- predicates:
- - Path=/huanzi833
Execute run, o Tomcat integrado do springboot é iniciado, porta 9001
Endereço de entrada do navegadorhttp://localhost:9001/huanzi833
Se quiser que o gateway fique indisponível, você pode adicionar as seguintes configurações ao 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
-
Acesso pelo navegador, os resultados são os seguintes:
Nota: Após modificar o arquivo de propriedades, reinicie o aplicativo você mesmo. Não repetirei as instruções todas as vezes.
O roteamento entra em vigor após o horário definido por Depois. Por exemplo: solicitações após 1º de janeiro de 2020 são encaminhadas para o meu blog e solicitações anteriores a esse horário não podem ser encaminhadas.
- 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
-
O roteamento antes do horário definido em Before entra em vigor. Por exemplo: solicitações anteriores a 1º de janeiro de 2021 são encaminhadas para meu blog e solicitações após esse horário não podem ser encaminhadas.
- 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
-
O roteamento entre os horários definidos por Between entra em vigor. Por exemplo: solicitações entre 1º de janeiro de 2020 e 1º de outubro de 2020 são encaminhadas para meu blog. Solicitações fora deste horário não poderão ser encaminhadas. juntos para evitar configurações repetidas.
- 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
-
Para Cookie, os predicados podem receber dois parâmetros, um é o nome do Cookie e o outro é a expressão regular. As regras de roteamento corresponderão ao valor do nome do Cookie correspondente e à expressão regular, o roteamento será executado. o roteamento será executado.
- 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
-
Usando a correspondência de roteamento de cookies, podemos inserir cmd para testar e inserir a seguinte instrução em cmd:
Semelhante à correspondência de rota de cookie, também existem dois parâmetros, um nome de parâmetro e uma expressão regular. Se houver uma correspondência, a rota será executada. Se não houver correspondência, a rota não será executada.
- 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
-
Digite cmd para testar, insira a seguinte instrução em cmd:
A configuração a seguir corresponde ao endereço do host, como www.csdn.net ou www.baidu.com ou blog.csdn.net e outros endereços
- 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
-
Digite cmd para testar, insira a seguinte instrução em 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
-
Digite cmd para realizar o teste Get. Insira a seguinte instrução em cmd:
Digite cmd para realizar o teste POST Insira a seguinte instrução em cmd: (Nota: se o caminho no controlador do provedor de serviços usar GetMapping e -X POST for usado aqui ao chamar, um 404 aparecerá)
O predicado também suporta roteamento definindo uma solicitação com um determinado número de intervalo IP, como 192.168.1.1/24 (onde 192.168.1.1 é o endereço IP, 24 é a máscara de sub-rede e 24 aqui significa que a máscara de sub-rede é 255.255.255.0 ). Você pode definir esse endereço como o endereço IP local para teste.
- 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
-
A correspondência de rota de caminho/correspondência de parâmetros/correspondência de peso será concluída na integração com o centro de registro abaixo.
1. Primeiro crie o centro de atendimento Eureka, o código é o seguinte: