Nota: Ele entrará em conflito com as dependências do spring-webmvc, portanto, o spring-webmvc precisa ser excluído.
2. Escreva o arquivo de configuração yml
servidor.port = 8088 é Porta de acesso ao gateway
spring.application.name é O nome do serviço do gateway atual
As regras de roteamento são definidas abaixo de gateway.routes:
id é o nome desta regra de roteamento. Pode haver muitas regras de roteamento em gateway.routes.
URL: Acesse o serviço do gateway atual, Para qual URL encaminhar?, Em primeiro lugar, não consigo encaminhar todas as solicitações para o gateway. Certas condições precisam ser atendidas.
predicados: quando A solicitação chega ao gateway atual(Então Essa requisição deve trazer o IP + número da porta do gateway atual. informações, seguidas de uma barra /, para que o gateway possa usar como padrão que essas informações estejam disponíveis,Esta informação não precisa ser considerada em predicados),
Se o URL após o número da porta começar com /order-serv/**,Então Basta encaminhar para a porta ip + do URL acima . e barra /Todos os caminhos subsequentes não serão removidos, então ele é encaminhado para o endereço http://localhost:8020/order-serv/order/add
(order-serv é o nome do serviço para evitar que o serviço de pedidos tenha um endereço começando com /order/add, e o serviço de inventário também tenha um endereço começando com /order/add, então As solicitações enviadas ao gateway levam o nome do serviço a ser encaminhado.),mas Não há /order-serv/ na solicitação recebida pelo serviço de pedidos., apenas a solicitação enviada é http://localhost:8020/order/add, para que possa ser recebida. Deixe o gateway remover o caminho da primeira camada, filtrar prefixos por meio de filtros
Se a afirmação não for satisfeita, um erro 404 será relatado.
Aqui codificamos os endereços URL encaminhados na configuração. Quando o servidor é migrado, o endereço IP muda ou o servidor é implantado em um cluster e o balanceamento de carga precisa ser executado por meio do nginx, o que é muito problemático. .
Podemos resolver facilmente esses problemas integrando gateway e nacos
Integrar Nacos
1. Continue a introduzir dependências nacos
2. Continue escrevendo o arquivo de configuração yml
(1) Para integrar o nacos, basta registrar o serviço de gateway atual no nacos e escrever o endereço do serviço nacos e a senha da conta
(2) Altere o endereço de qual serviço encaminhar nas regras de roteamento para o nome de serviço "order-service" (url: order-service), e porque você precisa usar a estratégia de balanceamento de carga da faixa de opções que vem com nacos, então adicione lb:// na frente, lb significa balanceamento de carga de balanceamento de carga.
gatewayO gateway substituirá todo o "serviço de pedido" pelo endereço IP de um dos serviços de pedido (porque o gateway puxará regularmente a lista de endereços IP de vários serviços registrados no nacos)
Isso resolve o problema de que quando o servidor é migrado, o endereço IP muda ou o servidor é implantado em um cluster, o nginx precisa ser usado para proxy reverso e balanceamento de carga.
Regras de roteamento abreviadas: o acordo é maior que a configuração
(1) Depois de ativar a função de identificação automática de serviços nacos, não há necessidade de escrever regras de asserção.
(2) Quando uma solicitação enviada ao gateway começa com um nome de serviço registrado no nacos, ela será automaticamente encaminhada para um servidor desse serviço, e o caminho da primeira camada será automaticamente filtrado (desvantagem: as regras de roteamento não são flexíveis suficiente)
Neste momento, desde que você acesse-o de acordo com o formato de endereço de gateway/microsserviço/interface, poderá obter uma resposta bem-sucedida.
fábrica de afirmação
Fazer afirmações com base em URL é a fábrica de afirmações integrada do gateway.

Fábrica de asserções de roteamento personalizado
Supõe-se aqui que você personalize uma fábrica de asserções com base nos parâmetros de solicitação de consulta, copie o conteúdo no código-fonte e, em seguida, modifique-o conforme necessário.
customizar
Uma fábrica de asserções baseada em parâmetros de solicitação de consulta,
Você precisa herdar a classe AbstractRoutePredicateFactory e reescrever a lógica do método apply. No método apply, você pode obter o objeto ServerHttpRequest por meio de exchange.getRequest(), para que possa obter os parâmetros de solicitação, método de solicitação, cabeçalho de solicitação e outras informações.
1. Deve ser um componente de mola, ou seja, um feijão
2. A turma deve ser adicionada
Fábrica de Predicados de Rota
como um fim
3. Deve ser herdado
ResumoRoutePredicateFactory
4. Você deve declarar uma classe interna estática e declarar atributos para receber as informações de asserção correspondentes no arquivo de configuração.
5. Precisa ser combinado
atalhoFieldOrder
Vincular
6. Use apply para julgar logicamente se true é uma correspondência bem-sucedida ou se false é uma correspondência com falha.
Filtrar (filtrar primeiro e depois rotear)
(1) Primeiro processe o endereço URL solicitado por meio do filtro ou adicione, exclua e modifique algumas informações, como cabeçalhos de solicitação, cookies, etc.
(2) Em seguida, roteie para o servidor correspondente por meio da lista de serviços nacos
A função do filtro: quando uma solicitação chega ao gateway, podemos processá-la com lógica de negócios.
por exemplo:
(1) Passe o filtro pela frenteRemova a primeira camada de caminhos
(2) Você pode adicionar um cabeçalho de solicitação a todas as solicitações que chegam ao gateway e, em seguida, definir o conteúdo interno.
(3) Você pode definir um cookie para todas as solicitações que chegam ao gateway, etc.
Para obter detalhes sobre todos os filtros integrados, visite o site oficial
https://docs.spring.io/spring-cloud-gateway/docs/current/reference/html/#gatewayfilter-factories
Aqui estão alguns exemplos de código:
O endereço de teste é enviado para o gateway gateway
Roteie para o seguinte endereço @GetMapping por meio de rotas e o código a seguir para receber a solicitação e responder
Exemplo 1:
Exemplo 2
Exemplo 3
O endereço URL anterior é enviado ao gateway, filtrado e prefixado com /mall-order. Neste momento, para que o servidor receba uma resposta, ele deve ser configurado para que todas as solicitações enviadas sejam transportadas /mall-order.Desta forma, o servidor normalmente pode receber solicitações roteadas pelo gateway.
Exemplo 4
As solicitações enviadas ao gateway atual serão encaminhadas para o site do Baidu
302 é o código de status de resposta após o redirecionamento
Filtros personalizados

filtro global
A diferença entre filtros locais e filtros globais:
Parcial: Parcial é para uma determinada rota e precisa ser configurado na rota.
Global: Para todas as solicitações de roteamento, não há necessidade deConfigurado no arquivo de configuração, Uma vez definido, ele é colocado em uso
Filtros globais integrados:
Se lb estiver incluído no endereço de roteamento, a política de balanceamento de carga será automaticamente adotada, correspondendo ao primeiro filtro global acima.
Esses filtros globais serão julgados e processados automaticamente, sem nosso gerenciamento.
Filtros globais personalizados (pontos-chave)
Registre todas as solicitações de acesso e salve-as em formato de log. Você pode usar filtros globais personalizados.
Ou você pode personalizar filtros globais para determinar o login e as permissões do usuário.
Personalizar filtros globais é muito fácil
1. Defina uma classe e deixe-a para o contêiner springIOC para gerenciamento, ou seja, adicione anotações de primavera. @Componente
2.
Herdar a interface GlobalFilter, para reescrever o método de filtro interno, você só precisa escrever o corpo do método interno.
3.
Troca de parâmetrosem Contém Entre neste portalTodas as informações solicitadas, retire o endereço de URL, cabeçalhos, cookies, parâmetros de caminho e outras informações e, em seguida, execute o correspondente processamento de negócios
4. retornar cadeia.filtro(troca) Liberar a solicitação
Solicitar registro
No microsserviço do gateway, adicione este comando aqui para habilitar o log e registrar todas as solicitações que passam pelo gateway, mas ele só será enviado para o console.

configuração de domínio cruzado de gateway
Cross-domain: Quando a solicitação http não está no mesmo IP + na mesma porta, é chamada de cross-domain.
(Apenas o mesmo IP + a mesma porta é chamado de mesmo domínio, e ambos estão satisfeitos por estarem no mesmo domínio)
1. Configure através de yml , configurado no próximo nível de gateway

O conteúdo da configuração pode ser modificado entre domínios por você mesmo
2. Definir através da classe de configuração
sentinela combinada com gateway gateway
Combinado com o sentinela, execute o downgrade do controle de fluxo nas solicitações enviadas ao gateway.
sentinela é dividida em duas partes
Pré-requisito: baixe o cliente sentinela do servidor remoto, instale e execute-o
O serviço de gateway requer apenas:
O arquivo de configuração do serviço gateway mais a porta IP +, senha da conta do cliente sentinela
Desta forma, o downgrade do controle de fluxo do sentinela é integrado.
sentinela tem regras especiais para serviços de gateway, sua interface é diferente da interface de downgrade de controle de fluxo para métodos (entradas de serviço) no controlador.
Você pode limitar o fluxo atual com base nessas regras na fábrica de asserções.
O fluxo pode ser limitado com base em um determinado IP, nome de domínio remoto, cabeçalho de solicitação, parâmetros na URL e valor do cookie.
Personalize o conteúdo da resposta do sentinela combinado com o gateway
existirDepois que a camada de gateway for rebaixada ou destruída pelo controle de fluxo sentinela, ela responderá com o seguinte conteúdo ao solicitante.,

Se tal conteúdo não for o que desejamos, precisamos customizar a forma de responder às exceções.Existem duas maneiras
Método 1: (simples)
Na configuração yml, escreva o conteúdo acima em camadas,
primavera
.
nuvem
.
sentinela
.
SCG
.
cair pra trás
.
resposta
‐
corpo
=
'{"código":403,"mes":"
Limite atual
"}'
O conteúdo após o corpo da resposta é o nosso conteúdo de resposta personalizado (em formato json)
, o conteúdo escrito é o conteúdo da resposta
Caminho 2:

Defina o código de status da resposta, o tipo de resposta (no formato json) e o conteúdo da resposta ("Downgraded!")
Alta disponibilidade do gateway
