Arquitecturas basadas en microservicios: Spring Cloud Gateway

Spring Cloud Gateway puede considerarse un sucesor del proyecto Spring Cloud Netflix ZuulAmbos proyectos se encargan de proporcionar un punto de entrada a nuestro ecosistema de microservicios, proporcionando capacidades de enrutamiento dinámico, seguridad y monitorización de las llamadas que se realicen.

¿Qué diferencia hay entre Spring Cloud Netflix Zuul y Spring Cloud Gateway?

Zuul se basa en servlet 2.5 (funciona con 3.x), usando API de bloqueo y no admite conexiones de larga duración, como websockets.

Por otro lado, Spring Cloud Gateway se basa en Spring Framework 5, Project Reactor (permitiendo la integración con Spring WebFlux) y Spring Boot 2 utilizando API sin bloqueo. Esto hace que sea compatible con conexiones de larga duración (Websockets) y tiene una mejor integración con Spring.

Además con el lanzamiento de Spring Boot 2 y Spring Cloud 2, Spring Cloud Gateway tiene un rendimiento superior en comparación con el de Zuul. Gracias a eventloop de Netty que alimenta la SC Gateway y el servidor web predeterminado para springboot2.

¿Cómo se configura Spring Cloud Gateway?

Se puede realizar utilizando una clase Java de configuración haciendo uso de RouteLocator o usando la configuración de propiedades en un archivo de properties (.yml).

spring cloud gateway configuration javaConfiguración Java

 

spring cloud gateway configuration properties

Archivo de properties (.yml)

En ambos procesos, lo que estamos haciendo es configurar nuestro enrutamiento para que cuando nos llegue una petición por “/foo/**” (el path) lo envíe a la url “http://foo.com:8086” que será la url que pertenezca al microservicio al que queramos enviar la petición.

¿Qué características y funcionalidades nos proporciona Spring Cloud Gateway?

Todas las características y funciones que vamos a nombrar a continuación se pueden configurar mediante una clase Java o mediante un archivo de properties (.yml).

Routing Handler Spring Cloud Gateway envía las solicitudes al Gateway Handler Mapping que determina qué se debe hacer con las solicitudes que coinciden con una ruta específica
Dynamic Routing Al igual que Zuul , Spring Cloud Gateway proporciona medios para enrutar solicitudes a diferentes servicios
Routing Factories Spring Cloud Gateway combina las rutas usando la infraestructura Spring WebFlux HandlerMapping. Incluye muchas built-in Route Predicate Factories. Todos estos Predicates coinciden con diferentes atributos de la solicitud HTTP pudiéndolos combinarlos.
WebFilter Factories Los filtros de enrutamiento hacen posible la modificación de la solicitud HTTP entrante o de la respuesta HTTP saliente
Spring Cloud DiscoveryClient Support Spring Cloud Gateway se puede integrar fácilmente con las bibliotecas Service Discovery y Registry, como Eureka Server y Consul
Monitoring Spring Cloud Gateway hace uso de la API Actuator, una conocida biblioteca Spring-Boot que proporciona varios servicios listos para monitorear la aplicación

 

En conclusión, si lo que buscas es tener una herramienta de enrutamiento simple, con mejor integración con Spring que otras tecnologías similares como Zuul, y además tener compatibilidad con conexiones de larga duración (Websockets), esta es la tecnología ideal que estamos buscando para desarrollar nuestros proyectos de una manera fácil y sencilla.

Referencias

   Spring Cloud Gateway   ≡   Spring Cloud Static   ≡   Spring Cloud Gateway configuring a simple route