Os microsserviços tornaram-se a arquitetura de tecnologia dominante perseguida pelos principais fabricantes. A perspectiva de aprender microsserviços é muito promissora, e o SpringCloud se tornou a principal pilha de tecnologia de microsserviços. Esta série de artigos se concentrará na pilha de tecnologia SpringCloud e analisará e explicará de forma abrangente a aplicação real da pilha de tecnologia SpringCloud no cenário de microsserviços.
Spring Cloud Gateway
Índice de Conhecimento
- Introdução ao Gateway
- Começando
- prefixo de roteamento
- filtro
1 Introdução ao Gateway
Spring Cloud Gateway
É Spring Cloud
um projeto totalmente novo da equipe, um gateway baseado em tecnologias como Spring 5.0
, , SpringBoot2.0
, Project Reactor
etc. Ele visa fornecer um REST
método de gerenciamento de roteamento de solicitações simples, eficaz e unificado para arquitetura de microsserviços.
Spring Cloud Gateway
Como SpringCloud
porta de entrada no ecossistema, o objetivo é substituir o Netflix Zuul
. Gateway
Ele não apenas fornece um método de roteamento unificado, mas também Filter
fornece as funções básicas do gateway com base no método de cadeia. Por exemplo: segurança, monitoramento/métricas e limitação.
2 Introdução
spring_cloud_demos
Criar gateway_demo
submódulos no projeto
2.1 Apresentando dependências
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-gateway</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-consul-discovery</artifactId>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Hoxton.SR12</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
2.2 Aula de inicialização
/**
* Copyright (c) 2022 itmentu.com, All rights reserved.
*
* @Author: yang
*/
@SpringBootApplication
public class GateWayDemoApplication {
public static void main(String[] args) {
SpringApplication.run(GateWayDemoApplication.class, args);
}
}
2.3 Configuração
server:
port: 8502
spring:
application:
name: gateway
cloud:
consul:
host: 192.168.184.128
port: 8500
discovery:
service-name: ${
spring.application.name}
register: false
2.4 Configuração de roteamento
gateway:
# 路由si(集合)
routes:
# id唯一标识
- id: consumer-service-route
# 路由服务地址
uri: lb://service-consumer
# 断言
predicates:
- Path=/**
Descrição do código:
1:routes:id表示路由标识,唯一即可,当前案例中表示消费者服务对应的路由
2:uri: lb://service-consumer表示uri使用负载均衡模式,lb表示loadbalance,”lb:“后跟注册中心对应的服务名
2.5 Transforme o serviço original ao consumidor
Adicionar @EnableDiscoveryClient
registro de anotação para abrir o centro de registro
/**
* Copyright (c) 2022 itmentu.com, All rights reserved.
*
* @Author: yang
*/
@SpringBootApplication
@EnableFeignClients
@EnableCircuitBreaker
@EnableHystrixDashboard
@EnableDiscoveryClient
public class ServiceConsumerApplication {
public static void main(String[] args) {
SpringApplication.run(ServiceConsumerApplication.class, args);
}
@Bean
@LoadBalanced//开启负载均衡
public RestTemplate restTemplate(){
return new RestTemplate();
}
}
Modifique a configuração para se registrar no registro
spring:
cloud:
consul:
discovery:
register: true
2.6 Teste
Acesse a interface de atendimento ao consumidor por http://localhost:8502/consumer/hello-feign
endereço
3 Prefixo de roteamento
3.1 Adicionar prefixo
A adição de prefixo no caminho mapeado pode gateway
ser obtida configurando o filtro da rota em . PrefixPath
Ele pode desempenhar o papel de ocultar o endereço da interface e evitar a exposição do endereço da interface.
Configure o endereço de solicitação para adicionar um filtro de prefixo de caminho
spring:
gateway:
routes:
filters:
- PrefixPath=/consumer
teste
Reiniciar o acesso ao serviço de roteamento
http://localhost:8502/hello-feign
O resultado é o seguinte, indicando que a rota para
http://localhost:8002/consumer/hello-feign
3.2 Remover prefixo
gateway
Configurando um filtro de rota em , StripPrefix
os endereços no caminho mapeado podem ser removidos. Passe StripPrefix=1
para especificar o número de prefixos a serem removidos da rota. Por exemplo: o caminho /api/consumer/hello-feign
será roteado para/consumer/hello-feign
Configurar remover filtro de prefixo de caminho
spring:
gateway:
routes:
filters:
- StripPrefix=1
teste
Reiniciar o acesso ao serviço de roteamento
http://localhost:8502/api/consumer/hello-feign
O resultado é o seguinte, indicando que ele é roteado para
/consumer/hello-feign
4 filtros
Uma das funções importantes de um filtro como gateway é implementar a autenticação de solicitação. As funções dos capítulos anteriores 路由前缀
também são implementadas usando filtros.
4.1 Filtros Comuns
Gateway
Existem dezenas de filtros integrados. Os filtros integrados comuns incluem:
nome do filtro | ilustrar |
---|---|
StripPrefix | Remover prefixo do caminho de solicitação correspondente |
PrefixPath | Prefixe o caminho de solicitação correspondente |
AddRequestHeader | Adicionar cabeçalho à solicitação correspondente |
AddRequestParameter | Adicionar parâmetros a solicitações correspondentes |
AddResponseHeader | Adicionar cabeçalho à resposta retornada do gateway |
4.2 Cenários Comuns
- Solicitar autenticação: se você não tiver direitos de acesso, intercepte diretamente
- Tratamento de exceção: registre logs de exceção
- Estatísticas de duração da chamada de serviço
4.3 Instruções de configuração do filtro
Gateway
Existem dois filtros
局部过滤器:只作用在当前配置的路由上,上面我们配置的路由前缀过滤器就是局部过滤器
全局过滤器:作用在所有路由上。
4.4 Demonstração da configuração do filtro global
Filtro de configuração globalAddResponseHeader
spring:
cloud:
gateway:
# 配置全局默认过滤器
default-filters:
# 往响应过滤器中加入信息
- AddResponseHeader=key1,value1
teste
Os cabeçalhos de resposta podem ser vistos no navegador