Microservicios con Spring Boot (3/4)

Seguimos con la tercera entrega de la serie Spring boot, en este caso se trata de hacer la integración de los distintos servicios web con Spring cloud.

Una vez iniciado tanto Eureka como los demás microservicios con los comandos indicados en el post anterior podemos acceder a la URL http://localhost:8081 y deberíamos ver los distintos microservicios disponibles como se muestra a continuación:MicroS5 spring boot 3.4 1

Una vez registrados los microservicios el API de Spring cloud nos permite invocar estos microservicios usando para ello la clase RestTemplate que nos proporciona una abstracción muy potente, ya que resuelve los microservicios usando el nombre y repartiendo la carga entre los distintos microservicios de cada tipo:MicroS5 spring boot 3.4 2No hemos indicado el host y el puerto del servicio sino el nombre que recibe en Eureka; el API de Spring cloud se encarga de resolver el host y el puerto en cada llamada repartiendo la carga. 

Comunicación entre microservicios 

Como advertimos, al realizar una implementación de microservicios estos no deben conocerse entre sí para evitar dependencias directas entre ellos.  

Aun así, es necesario que puedan comunicarse entre ellos, por ejemplo si queremos que cuando se borre un usuario se eliminen también los productos que tenga ese usuario asociados. 

Para ello se hace uso de dos patrones software, el patrón eventBus y el patrón commander. Se realizan los siguientes pasos:

  • El servicio de ‘product’ registra el comando de borrado en respuesta al evento de borrado de ‘user’:

MicroS5 spring boot 3.4 3

  • El servicio de ‘user’ invoca en el bus de eventos al evento de borrado de usuario, como se indica en la imagen:

MicroS5 spring boot 3.4 4Ventajas de esta arquitectura

  • Al cambiar el servicio de producto, el servicio de usuario no se ve afectado ya que quien implementa el comando de borrado es el servicio de producto
  • Si se añaden nuevos servicios que dependan de usuario éste no se ve afectado
  • La ejecución del comando se puede realizar de forma asíncrona o programar a una determinada hora en la que haya menos carga de trabajo

Servicio de agregación 

Para exponer el API de los microservicios hemos creado un servicio de agregación que se encarga de realizar las llamadas a los microservicios usando balanceo de carga.  

De esta forma exponemos un solo servicio y éste se encarga de invocar a Eureka para saber dónde están ubicados los microservicios e invocarlos enviando el resultado al cliente final.  

Puede integrar una caché de datos que evite invocar los servicios si no es necesario, e integrar la actualización de dicha caché teniendo en cuenta los eventos de actualización y borrado de datos. 

En nuestro caso además lo usamos para integrar los datos de usuario y productos en un solo servicio. Para su implementación usamos LinkedHashMap, de esta forma el cambio del modelo de ‘user’ o de ‘product’ no nos afecta a la implementación del servicio de agregación, como se muestra en la imagen:  MicroS5 spring boot 3.4 5 b

El resultado de este servicio se puede ver al invocar http://localhost:8080/api/v1/user/1 como se ve en la imagen:

MicroS5 spring boot 3.4 6

Con este breve repaso hemos anotado la configuración de los servicios en la nube y sus distintas dependencias. Para terminar esta aproximación a Spring boot, en la siguiente y última entrega analizaremos la automatización de los microservicios mediante contenedores.

 

 

Analizamos a fondo Microservicios con Spring Boot en 4 entregas:

Su rol es el de arquitecto software, especializado en tecnologías J2EE. Se trata de seleccionar tecnologías para desarrollos de proyectos desde cero, implementando patrones de software y buenas prácticas de desarrollo . Esto facilita la codificación de las reglas de negocio de forma que los programadores no tengan que preocuparse por la arquitectura que subyace y que ésta les facilite la programación.

Ver toda la actividad de Javier Ledo

Recibe más artículos como este

Recibirás un email por cada nuevo artículo.. Acepto los términos legales

Escribe un comentario