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 2

No 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:

MicroS5 spring boot 3.4 3

% block:image

Ventajas de esta arquitectura

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:

Cuéntanos qué te parece.

Enviar.

Los comentarios serán moderados. Serán visibles si aportan un argumento constructivo. Si no estás de acuerdo con algún punto, por favor, muestra tus opiniones de manera educada.