Compartilhamento de tecnologia

SpringCloudGateway

2024-07-12

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

efeito

  • Gerenciamento unificado, fácil de monitorar
  • Segurança, limitação de corrente: filtre informações ilegais na camada de gateway
  • gateway externo nginx, intranet de gateway
  • O nginx pode ser aprimorado com Lua ou Kong

conceito

  • id: qualquer nome
  • uri: O endereço do serviço proxy. id e uri são obrigatórios, predicado e filtro são opcionais
  • Predicado: pode ser usado para corresponder ao uri para acessar o gateway. Se correspondido, a rota atual entrará em vigor.
  • Filtro: uma instância do GatewayFilter, adicionando lógica antes ou depois do proxy, com maior flexibilidade

Fluxo de processamento

  • Primeiro, o Mapeamento do manipulador processa o URL e depois o entrega ao Web Handler. Ele chama a primeira metade do filtro para processamento. Após a conclusão do processamento, ele chama o serviço de proxy real. Depois que o serviço de proxy responde, ele executa a lógica. da segunda metade do filtro Retorne o resultado para WebHandler, depois para HandlerMapping e, finalmente, para o cliente.

usar

gateway:
      discovery:
        locator:
          enabled: true # 启用自动根据服务ID生成路由
          lower-case-service-id: true # 设置路由的路径为小写的服务ID
  • 1
  • 2
  • 3
  • 4
  • 5

configuração yml

  • Se os elementos da lista tiverem vários campos, você precisará de "-" e dois pontos para especificar cada campo e valor, respectivamente; se houver apenas um campo, você poderá usar vírgulas para separá-lo;
  • Configuração do tipo de objeto, cada campo pode ser configurado através de “-” e dois pontos
  • Tipo de mapa: chave, valor separado por dois pontos
predicates:
  - Path=/sendOrder
  - Query=name,ma.
  - name: Query
    args:
      param: id
      regexp: d+
 #predicates是List, 它的元素是
 public class PredicateDefinition {

	@NotNull
	private String name;

	private Map<String, String> args = new LinkedHashMap<>();
  }
  等号分割转成对象的写法不是yml内置支持的
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

predicado

  • A configuração do predicado é uma Lista, cujos elementos podem ser strings em um formato específico ou objetos. Método de escrita de string: dividido por sinal de igual, a primeira parte é o nome do predicado, a segunda parte args é separada por vírgulas, o valor é salvo no valor do mapa e a chave do mapa é gerada automaticamente. Método de escrita de objeto: PredicateDefinition
  • Se houver vírgulas e dois pontos nos próprios argumentos, o formato de string não poderá ser usado
  • O métodoshortType define o método de análise dos parâmetros args para ConfigClass: atalhoFieldOrder remove o prefixo ShortFieldPrefix e corresponde ao nome do campo ConfigClass. O val do parâmetro args corresponde ao valor do campo de ConfigClass: lista separada por vírgula; : Lista separada por vírgula, mas a última O valor é um valor booleano, que eventualmente é convertido em um Mapa de 2 chaves. O valor da primeira chave é a Lista na frente do valor booleano, e a segunda chave é a. Valor booleano.
  • Usado para combinar solicitações de acesso ao gateway (como uri, parâmetros de consulta, cabeçalhos de solicitação). Se correspondido, a rota atual entrará em vigor.
  • Correspondente à implementação de GatewayPredicate, a classe de implementação é criada pela fábrica. A fábrica é a classe de implementação de RoutePredicateFactory. A especificação de nomenclatura da classe de implementação é: nome do predicado + RoutePredicateFactory.
  • O nome do predicado corresponde ao prefixo do nome da classe da classe de implementação de fábrica e o parâmetro do predicado args corresponde ao ConfigClass de fábrica.
  • Vários predicados sãoeRelação
  • Quando o predicado não passa, o gateway retorna 404

Caminho

  • Corresponder caminhos, oferecer suporte à correspondência de formigas e extrair uriVariables por meio de {}

Consulta

  • Existe um nome de parâmetro de solicitação http correspondente. O valor pode ser regular.
  • nome é consulta fixa, args possui 2 valores, param e regexp, correspondentes ao nome e valor do parâmetro de consulta
  • Quando apenas o nome estiver configurado significa que enquanto existir o parâmetro da requisição ele será passado.

Cabeçalho

  • HeaderRoutePredicateFactory
  • Corresponder o nome e o valor do cabeçalho da solicitação Você só pode corresponder ao nome. O valor real do cabeçalho da solicitação pode ser múltiplo.

Método

  • Corresponde ao método de solicitação HTTP, a configuração deve estar em letras maiúsculas e separadas por vírgula.

Endereço Remoto

  • O IP do cliente correspondente à solicitação, para ser mais preciso, o IP do último proxy da rede, pode ser múltiplo, separado por vírgula

Hospedar

  • Corresponde ao valor da parte do host no cabeçalho da solicitação do host (excluindo a porta). Pode ser múltiplo, separado por vírgulas e pode ser correspondido por ant.
  • Use AntPathMatcher para fazer a correspondência e o separador de caminho é "."

Biscoito

  • Combine o nome e o valor do cookie. O valor pode ser correspondido regularmente.

Peso

  • Usado para balanceamento de carga de diferentes rotas. Rotas no mesmo grupo são carregadas de acordo com o peso.
  • Você pode configurar 2 valores, separados por vírgula, que são agrupamento e peso.
  • WeightCalculatorWebFilter: Quando iniciado, um mapa de duas camadas é gerado com base na configuração de peso. A primeira camada é o nome do grupo e a segunda camada é o ID de roteamento. Quando a solicitação chega, um número aleatório de 0 a 1 é gerado. e um ID de roteamento é selecionado para cada grupo.
  • WeightRoutePredicateFactory: ao filtrar por predicado, filtre com base no grupo e no ID da rota

filtro

  • O método de gravação de configuração é igual ao predicado. O método de gravação de string: dividido por sinal de igual. A primeira parte corresponde ao prefixo do nome da classe GatewayFilterFactory da fábrica de filtros e a segunda parte é o parâmetro.
  • Filtros são usados ​​para modificar solicitações e respostas

AdicionarCabeçalhoDeSolicitação

  • Adicione cabeçalhos de solicitação, que podem ser obtidos pelo back-end
  • O valor do cabeçalho da solicitação suporta aquisição dinâmica de uriVariables

Prefixo de tira

  • Existe apenas um valor inteiro n. Após dividir o caminho solicitado por "/", remova o prefixo n.

Limitando

Domínio cruzado

spring.cloud.gateway.globalcors:
  cors-configurations:
    '[/**]': #跨域的uriPattern
      allowedHeaders: "*"
      allowedOrigins: "*"
      allowedMethods:
        - POST
        - OPTIONS
        - GET
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • O servidor determina se é uma solicitação entre domínios, verificando se a origem do cabeçalho da solicitação e o esquema, o host e a porta do URL da solicitação são iguais, desde que haja uma diferença, é uma solicitação entre domínios.
  • Deve haver uma configuração de domínio cruzado e o uri solicitado corresponde ao uriPattern da configuração de domínio cruzado. O gateway determinará se é de domínio cruzado. Se for de domínio cruzado, permitirá cabeçalhos de solicitação de domínio cruzado. fontes, métodos de solicitação e solicitações reais na configuração de domínio cruzado Se o cabeçalho da solicitação, a origem e o método de solicitação correspondem, se todos corresponderem, execute o acesso entre domínios, caso contrário, retorne 403Forbiden.
  • org.springframework.web.reactive.handler.AbstractHandlerMapping#getHandler
  • org.springframework.web.cors.reactive.DefaultCorsProcessor#process

Gerar rotas automaticamente

  • Oferece suporte à obtenção do ID do serviço por meio da descoberta de serviço e gera automaticamente a configuração de roteamento com base no ID do serviço.O uri da configuração de roteamento padrão é lb://serviceId, o predicado é /serviceId/** e o filtro é Rewritepath para remover serviceId.

filtro global

FiltroClienteReactiveLoadBalancer

  • Para processar o URI de roteamento com esquema lb, primeiro obtenha a instância de serviço de acordo com o nome do serviço por meio de ServiceInstanceListSupplier e, em seguida, balanceie a carga por meio da instância ReactorLoadBalancer

FiltroRouteToRequestUrl

  • Faça duas coisas: 1. Dê suporte a esquemas de 2 camadas, salve o esquema externo em GATEWAY_SCHEME_PREFIX_ATTR e remova-o. 2. Use o sheme interno, o host e a porta para substituir o URI solicitado real para obter o encaminhamento.