Red de conocimiento informático - Conocimiento informático - Implementar carga dinámica y persistencia del enrutamiento Spring Cloud Gateway

Implementar carga dinámica y persistencia del enrutamiento Spring Cloud Gateway

Spring Cloud Gateway proporciona API para agregar, eliminar y consultar rutas. Las rutas agregadas a través de la API se almacenan en la memoria de forma predeterminada. Cuando se reinicia la aplicación, las rutas agregadas a través de la API se perderán, lo que comprometerá la funcionalidad de la aplicación. Si la aplicación tiene varias instancias, Spring Cloud Gateway no proporciona un mecanismo de sincronización de rutas y la información de enrutamiento entre varias instancias será inconsistente, lo que afectará el negocio normal. Debido a que la implementación predeterminada de Spring Cloud Gateway no es lo suficientemente confiable y consistente para implementarse en un entorno de producción, es necesario personalizar el mecanismo de sincronización y almacenamiento de rutas.

En Spring Cloud Gateway, el objeto RouteDefinition define una ruta. Cuando se inicia Spring Cloud Gateway, primero carga todas las RouteDefinitions, luego genera rutas y las carga en ellas (utilizando un mecanismo de almacenamiento en caché, cuyo objetivo principal es mejorar la eficiencia de la coincidencia de rutas). Spring Cloud Gateway puede cargar RouteDefinition desde las siguientes cuatro fuentes de datos: archivos de configuración, Fluent Route API, RouteDefinitionRepository y DiscoveryClient (la interfaz de descubrimiento de servicios definida por Spring Cloud). Como puede ver en el mecanismo de carga de rutas, la forma de agregar, eliminar y modificar rutas dinámicamente es la implementación de un RouteDefinitionRepository personalizado, que garantiza que las rutas agregadas previamente se carguen cuando se inicia Spring Cloud Gateway.

Spring Cloud Gateway define un RouteRefreshListener para escuchar el evento de cambio de ruta RefreshRoutesEvent, por lo que después de agregar, eliminar o actualizar una ruta, solo necesita publicar un evento RefreshRoutesEvent para actualizar todos los componentes que almacenan rutas. a ellos.

Pasos de implementación:

Ejemplo de código fuente Spring Cloud Gateway basado en la implementación de MySQL