Gateway gateway para microsserviços que você deve conhecer

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 Cloudum projeto totalmente novo da equipe, um gateway baseado em tecnologias como Spring 5.0, , SpringBoot2.0, Project Reactoretc. Ele visa fornecer um RESTmétodo de gerenciamento de roteamento de solicitações simples, eficaz e unificado para arquitetura de microsserviços.

Spring Cloud GatewayComo SpringCloudporta de entrada no ecossistema, o objetivo é substituir o Netflix Zuul. GatewayEle não apenas fornece um método de roteamento unificado, mas também Filterfornece 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_demosCriar gateway_demosubmó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 @EnableDiscoveryClientregistro 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-feignendereço

imagem-20220320180509185

3 Prefixo de roteamento

3.1 Adicionar prefixo

A adição de prefixo no caminho mapeado pode gatewayser obtida configurando o filtro da rota em . PrefixPathEle 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

imagem-20220320181817680

3.2 Remover prefixo

gatewayConfigurando um filtro de rota em , StripPrefixos endereços no caminho mapeado podem ser removidos. Passe StripPrefix=1para especificar o número de prefixos a serem removidos da rota. Por exemplo: o caminho /api/consumer/hello-feignserá 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

imagem-20220320182253539

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

GatewayExistem 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

GatewayExistem 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

imagem-20220320183325636

Acho que você gosta

Origin blog.csdn.net/scmagic/article/details/123942945
Recomendado
Clasificación