Nota: entrará en conflicto con las dependencias de spring-webmvc, por lo que es necesario excluir spring-webmvc.
2. Escriba el archivo de configuración yml
servidor.puerto = 8088 es Puerto de acceso a la puerta de enlace
spring.application.name es El nombre del servicio del servicio de puerta de enlace actual.
Las reglas de enrutamiento se definen debajo de gateway.routes:
id es el nombre de esta regla de enrutamiento. Puede haber muchas reglas de enrutamiento en gateway.routes.
dirección URL: Accede al servicio de la puerta de enlace actual, ¿A qué URL reenviar?En primer lugar, no puedo reenviar todas las solicitudes a la puerta de enlace. Se deben cumplir ciertas condiciones. Las afirmaciones de predicados desempeñan esta función.
predicados: cuando La solicitud llega a la puerta de enlace actual.(Entonces Esta solicitud debe llevar la IP + número de puerto de la puerta de enlace actual. información, seguida de una barra diagonal /, para que la puerta de enlace pueda establecer de forma predeterminada que esta información esté disponible,Esta información no necesita ser considerada en predicados.),
Si la URL después del número de puerto comienza con /order-serv/**,Entonces Simplemente reenvíe al puerto ip + de la URL anterior . y barra /No se eliminarán todas las rutas posteriores., luego se reenvía a la dirección http://localhost:8020/order-serv/order/add
(order-serv es el nombre del servicio para evitar que el servicio de pedidos tenga una dirección que comience con /order/add, y que el servicio de inventario también tenga una dirección que comience con /order/add, por lo que Las solicitudes enviadas a la puerta de enlace llevan el nombre del servicio que se reenviará.),pero No hay /order-serv/ en la solicitud recibida por el servicio de pedidos., solo la solicitud enviada es http://localhost:8020/order/add, por lo que se puede recibir. Deje que la puerta de enlace elimine la ruta de la primera capa, filtrar prefijos a través de filtros
Si no se cumple la afirmación, se informará un error 404.
Aquí hemos codificado las direcciones URL reenviadas en la configuración. Cuando se migra el servidor, la dirección IP cambiará o el servidor se implementará en un clúster. El proxy inverso y el equilibrio de carga deben realizarse a través de nginx, lo cual es muy problemático. .
Podemos resolver fácilmente estos problemas integrando gateway y nacos.
Integrar Nacos
1. Continuar introduciendo dependencias de nacos
2. Continúe escribiendo el archivo de configuración yml.
(1) Para integrar nacos, simplemente registre el servicio de puerta de enlace actual en nacos y escriba la dirección del servicio de nacos y la contraseña de la cuenta.
(2) Cambie la dirección de qué servicio reenviar en las reglas de enrutamiento al nombre del servicio "order-service" (url: order-service), y debido a que necesita usar la estrategia de equilibrio de carga de la cinta que viene con nacos, entonces agregue lb:// al frente, lb significa equilibrio de carga.
puerta de enlaceLa puerta de enlace reemplazará todo el "servicio de pedidos" con la dirección IP de uno de los servicios de pedidos (porque la puerta de enlace extraerá periódicamente la lista de direcciones IP de varios servicios registrados en nacos)
Esto resuelve el problema de que cuando se migra el servidor, la dirección IP cambia o el servidor se implementa en un clúster, es necesario usar nginx para el proxy inverso y el equilibrio de carga.
Reglas de enrutamiento abreviadas: el acuerdo es mayor que la configuración
(1) Después de activar la función de identificación automática de servicios nacos, no es necesario escribir reglas de aserción.
(2) Cuando una solicitud enviada a la puerta de enlace comienza con un nombre de servicio registrado en nacos, se reenviará automáticamente a un servidor de ese servicio y la ruta de la primera capa se filtrará automáticamente (desventaja: las reglas de enrutamiento no son flexibles suficiente)
En este momento, siempre que acceda de acuerdo con el formato de dirección de puerta de enlace/microservicio/interfaz, puede obtener una respuesta exitosa.
fábrica de afirmaciones
Hacer afirmaciones basadas en URL es la fábrica de afirmaciones incorporada de la puerta de enlace.

Fábrica de afirmaciones de enrutamiento personalizadas
Aquí se supone que personaliza una fábrica de afirmaciones según los parámetros de solicitud de consulta, copia el contenido en el código fuente y luego lo modifica según sea necesario.
personalizar
Una fábrica de afirmaciones basada en parámetros de solicitud de consulta,
Debe heredar la clase AbstractRoutePredicateFactory y reescribir la lógica del método de aplicación. En el método de aplicación, puede obtener el objeto ServerHttpRequest a través de exchange.getRequest (), de modo que pueda obtener los parámetros de solicitud, el método de solicitud, el encabezado de solicitud y otra información.
1. Debe ser un componente de resorte, es decir, un frijol.
2. Se debe agregar la clase.
Fábrica de predicados de ruta
como fin
3. Debe ser heredado
Fábrica de predicados de ruta abstracta
4. Debe declarar una clase interna estática y declarar atributos para recibir la información de aserción correspondiente en el archivo de configuración.
5. Necesita combinarse
Orden de campo de acceso directo
Unir
6. Utilice aplicar para juzgar lógicamente si verdadero es una coincidencia exitosa o falso es una coincidencia fallida.
Filtrar (filtrar primero y luego enrutar)
(1) Primero procese la dirección URL solicitada a través del filtro, o agregue, elimine y modifique cierta información, como encabezados de solicitud, cookies, etc.
(2) Luego enrute al servidor correspondiente a través de la lista de servicios de nacos
La función del filtro: cuando llega una solicitud a la puerta de enlace, podemos procesar la solicitud con lógica empresarial.
Por ejemplo:
(1) Pase el filtro por el frenteEliminar la primera capa de caminos.
(2) Puede agregar un encabezado de solicitud a todas las solicitudes que llegan a la puerta de enlace y luego configurar el contenido dentro.
(3) Puede configurar una cookie para todas las solicitudes que lleguen a la puerta de enlace, etc.
Para obtener detalles sobre todos los filtros integrados, visite el sitio web oficial
https://docs.spring.io/spring-cloud-gateway/docs/current/reference/html/#gatewayfilter-factories
A continuación se muestran algunos ejemplos de código:
La dirección de prueba se envía a la puerta de enlace.
Enrute a la siguiente dirección @GetMapping a través de rutas y el siguiente código para recibir la solicitud y responder
Ejemplo 1:
Ejemplo 2
Ejemplo 3
La dirección URL anterior se envía a la puerta de enlace, se filtra y tiene el prefijo /mall-order. En este momento, para que el servidor pueda recibir respuestas, debe configurarse para que todas las solicitudes enviadas lleven /mall-order.De esta manera, el servidor normalmente puede recibir solicitudes enrutadas por la puerta de enlace.
Ejemplo 4
Las solicitudes enviadas a la puerta de enlace actual se dirigirán al sitio web de Baidu.
302 es el código de estado de respuesta después de la redirección
Filtros personalizados

filtro global
La diferencia entre filtros locales y filtros globales:
Parcial: Parcial es para una ruta determinada y debe configurarse en la ruta.
Global: para todas las solicitudes de enrutamiento, no es necesarioConfigurado en el archivo de configuración, Una vez definido, se pone en uso.
Filtros globales integrados:
Si lb se incluye en la dirección de enrutamiento, la política de equilibrio de carga se adoptará automáticamente, correspondiente al primer filtro global anterior.
Estos filtros globales serán juzgados y procesados automáticamente, sin nuestra gestión.
Filtros globales personalizados (puntos clave)
Registre todas las solicitudes de acceso y guárdelas en forma de registro. Puede utilizar filtros globales personalizados.
O puede personalizar los filtros globales para determinar el inicio de sesión y los permisos del usuario.
Personalizar los filtros globales es muy fácil
1. Defina una clase y déjela en el contenedor springIOC para su administración, es decir, agregue anotaciones de primavera. @Compenente
2.
Heredar la interfaz GlobalFilter, Para reescribir el método de filtro en el interior, solo necesita escribir el cuerpo del método en el interior.
3.
Intercambio de parámetrosen Contiene Ingrese a esta puerta de enlaceToda la información solicitada, saque la dirección URL, encabezados, cookies, parámetros de ruta y otra información, y luego realice las correspondientes procesamiento de negocios
4. cadena de retorno.filtro(intercambio) Liberar la solicitud
Solicitar registro
En el microservicio de puerta de enlace, agregue este comando aquí para habilitar el registro y registrar todas las solicitudes que pasan a través de la puerta de enlace, pero solo se enviará a la consola.

configuración entre dominios de la puerta de enlace
Dominio cruzado: cuando la solicitud http no está en la misma IP + el mismo puerto, se denomina dominio cruzado.
(Solo la misma IP + el mismo puerto se llama el mismo dominio, y ambos están satisfechos con estar en el mismo dominio)
1. Configurar a través de yml , configurado en el siguiente nivel de puerta de enlace

Usted mismo puede modificar el contenido de la configuración entre dominios.
2. Establecer a través de la clase de configuración
centinela combinado con puerta de enlace
Combinado con Sentinel, realiza una degradación del control de flujo en las solicitudes enviadas a la puerta de enlace.
centinela se divide en dos partes
Requisito previo: descargue el cliente Sentinel desde el servidor remoto, instálelo y ejecútelo
El servicio de puerta de enlace sólo requiere:
El archivo de configuración del servicio de puerta de enlace más el puerto IP +, contraseña de la cuenta del cliente centinela
De esta manera, se integra la degradación del control de flujo de Sentinel.
Sentinel tiene reglas especiales para los servicios de puerta de enlace., su interfaz es diferente de la interfaz de degradación del control de flujo para métodos (entradas de servicio) en el controlador.
Puede limitar el flujo actual según estas reglas en la fábrica de aserciones.
El flujo se puede limitar en función de una determinada IP, nombre de dominio remoto, encabezado de solicitud, parámetros en la URL y valor de la cookie.
Personalice el contenido de la respuesta de Sentinel combinado con la puerta de enlace
existirDespués de que la capa de puerta de enlace sea degradada o destruida por el control de flujo centinela, responderá con el siguiente contenido al solicitante.,

Si dicho contenido no es lo que queremos, debemos personalizar la forma de responder a las excepciones.Hay dos maneras
Método 1: (sencillo)
En la configuración de yml, escriba el contenido anterior en capas,
primavera
.
nube
.
centinela
.
esc
.
retroceder
.
respuesta
‐
cuerpo
=
'{"código":403,"mes":
Límite actual
"}'
El contenido después del cuerpo de la respuesta es nuestro contenido de respuesta personalizado (en formato json)
, el contenido escrito es el contenido de la respuesta
Camino 2:

Establezca el código de estado de la respuesta, el tipo de respuesta (en formato json) y el contenido de la respuesta ("¡Degradado!").
Puerta de enlace de alta disponibilidad
