Breaking

Post Top Ad

Your Ad Spot

viernes, 14 de junio de 2019

Nube de primavera: enrutamiento con Zuul y Gateway

Visión general

En este artículo, le presentaremos cómo enrutar sus aplicaciones a través de Zuul y Spring Cloud Gateway de Netflix .
En una arquitectura de microservicio típica tenemos muchas aplicaciones pequeñas que se ejecutan en diferentes hosts y puertos. El problema en este tipo de arquitectura es cómo los clientes (aplicaciones web en navegadores, aplicaciones móviles, aplicaciones de terceros que realizan una llamada de servicio web, etc.) pueden acceder a estos microservicios finales sin conocer sus hosts y puertos. Por ejemplo, el navegador restringe las llamadas a diferentes dominios (también conocido como CORS ).
Lo que necesitamos es un punto de entrada común a nuestros microservicios. Al usar esto, no solo liberamos a los clientes de conocer los detalles de la implementación de todos los servicios backend, sino que también reducimos el esfuerzo de desarrollo en el lado del servidor. Al mismo tiempo, si un microservicio final tiene varias instancias en ejecución, podemos realizar el equilibrio de carga en este punto de entrada.
Además, también podemos escribir todos los mecanismos de autenticación y autorización a este nivel. Esto reduce el desarrollo significativo en el lado de los microservicios finales.

Servidores de borde

Para resolver este problema, Netflix creó el servidor Zuul y posteriormente lo abrió. Spring proporcionó una envoltura agradable a su alrededor para incorporarlo fácilmente a la pila Spring.
Nota : Netflix lanzó recientemente Zuul 2 , pero Spring todavía no lo ha agregado a su ecosistema. Debido a esto, usaremos Zuul 1 en este artículo.
Spring también lanzó su propio enrutador llamado Spring Cloud Gateway. Tiene API sin bloqueo y admite conexiones de larga duración como WebSockets.
Veremos ambas soluciones en este artículo. El diagrama de arquitectura se ve así:
spring-cloud-routing-with-zuul-gateway

Preparar

En este artículo se supone que ya tiene conocimiento del proyecto Eureka de Netflix , que se utiliza como registro de servicios y para equilibrar la carga. Tenemos la siguiente configuración para el servicio backend:
  • Eureka Server : funciona como un registro de servicios y se ejecuta en el puerto 8761.
  • Servicio de usuario : un servicio REST simple que tiene un único punto final /getPublicAddressy se ejecuta en el puerto 8100.
  • Servicio del producto : un servicio REST simple que tiene un único punto final /categoriesy se ejecuta en el puerto 8200.
spring-cloud-routing-with-zuul-gateway-eureka-setup

Netflix Zuul

La mejor manera de comenzar con un proyecto de esqueleto es usar Spring Initializr . Seleccione su versión preferida de Spring Boot y agregue las dependencias "Zuul" y "Eureka Discovery", y genere como un proyecto de Maven:
spring-zuul-server-setup
Para convertirlo en un servidor proxy Zuul, todo lo que tenemos que hacer es agregar la @EnableZuulProxyanotación a nuestra clase principal:
@SpringBootApplication
@EnableZuulProxy
public class ZuulApplication {

    public static void main(String[] args) {
        SpringApplication.run(ZuulApplication.class, args);
    }
}
Estaremos ejecutando el servidor Zuul en el puerto 8050y también debe registrarse en el servidor Eureka. Así que en application.propertiesagregaremos lo siguiente:
server.port=8050

spring.application.name=zuul-edge-server

eureka.client.serviceUrl.defaultZone=http://localhost:8761/eureka/  
Comencemos este servidor y naveguemos su navegador al servidor Eureka en http: // localhost: 8761 / :
spring-zuul-server-display
Ahora que Zuul se ha registrado con Eureka, probemos el enrutamiento a nuestro servicio de usuario a través de él, navegando por el navegador al punto final http: // localhost: 8050 / user-service / getPublicAddress :
spring-zuul-route-user-service
Del mismo modo, para el producto-servicio navegue su navegador a http: // localhost: 8050 / producto-servicio / categorías :
spring-zuul-route-product-service
Como puede ver, estamos llamando a los servicios de back-end a través de Zuul. De forma predeterminada, los ID de clientes de Eureka se convierten en parte de los URI. Por ejemplo, aquí hicimos una llamada a Zuul usando /product-service/categoriesZuul verificará si hay algún servicio registrado como product-serviceen Eureka. Si está allí, obtendrá la URL del servicio y agregará la parte de la URL original restante, /categoriesy realizará la llamada.
Además, Zuul es consciente de la cinta de opciones, por lo que automáticamente cargará el saldo de la llamada si hay varias instancias del servicio backend en ejecución.
Los valores predeterminados pueden, por supuesto, cambiarse ajustando el archivo de propiedades, que se puede encontrar aquí . Tampoco es necesario que todos los servicios de back-end estén registrados en Eureka. También podemos enrutar a otros dominios también.

Spring Cloud Gateway

Veamos otro servidor de borde popular llamado Spring Cloud Gateway , que se basa en Spring Framework 5, Project Reactor y Spring Boot 2.0. Una vez más, vamos a crear un nuevo proyecto con Spring Initializr. Seleccione su versión preferida de Spring Boot y agregue las dependencias "Gateway" y "Eureka Discovery", y genere como un proyecto de Maven:
spring-gateway-server-setup
Estaremos ejecutando el servidor Zuul en el puerto 8060y también debe registrarse en el servidor Eureka. Así que en application.propertiesañadiremos:
server.port=8060

spring.application.name=gateway-edge-server

eureka.client.serviceUrl.defaultZone=http://localhost:8761/eureka/

spring.cloud.gateway.discovery.locator.enabled=true  
spring.cloud.gateway.discovery.locator.lowerCaseServiceId=true  
A diferencia de Zuul, Spring cloud Gateway no busca automáticamente en Eureka para enrutar llamadas. Así que lo habilitamos agregando un par de propiedades adicionales.
Comencemos este servidor y naveguemos su navegador al servidor Eureka en http: // localhost: 8761 / :
spring-zuul-server-display
Al igual que en el ejemplo anterior, podemos probar nuestro enrutamiento al servicio de usuario y al servicio de producto al navegar por nuestro navegador a http: // localhost: 8060 / user-service / getPublicAddress y http: // localhost: 8060 / product-service / categorías , respectivamente.
Al igual que Zuul, Spring Cloud Gateway busca un servicio en Eureka mediante la primera variable de ruta. Otras formas de cambiar el valor predeterminado se encuentran en su documentación, que se puede encontrar aquí .

Conclusión

En este artículo, hemos cubierto cómo utilizar Spring Cloud Zuul y Gateway para enrutar el tráfico a microservicios de back-end. Creamos dos servicios REST simples que se registraron con el servidor Eureka. Luego creamos el servidor Zuul que también se registró con Eureka y luego enruta el tráfico basado en él. Luego vimos un enfoque alternativo con Spring Cloud Gateway.

No hay comentarios.:

Publicar un comentario

Dejanos tu comentario para seguir mejorando!

Post Top Ad

Your Ad Spot

Páginas