Siguiendo con nuestra serie de posts sobre cómo implementar una arquitectura de microservicios haciendo uso de la plataforma Spring Cloud, hoy le toca el turno a otro componente imprescindible en un entorno distribuido: El servicio de Descubrimiento y Registro Spring Cloud Netflix Eureka. Como hemos mencionado en anteriores entradas la transición desde un entorno monolítico a otro basado en microservicios proporciona muchos beneficios desde el punto de vista del desarrollo y mantenimiento del software. Sin embargo, al mismo tiempo su adopción conlleva la aparición de una serie de problemas que necesitan ser tratados correctamente. Uno de estos "nuevos" problemas es precisamente la gestión de las direcciones de todos los microservicios de los que consta nuestra aplicación. Dependiendo del número de microservicios, así como de las políticas de replicación de los mismos, el mantenimiento de las direcciones puede llegar a ser muy complejo. Para lidiar con esta situación, en entornos distribuidos existe un concepto denominado Servicio de registro y descubrimiento. La aplicación de dicho concepto implica la creación de un servicio cuya única tarea es mantener el registro de todos los microservicios que son desplegados o eliminados. Podríamos considerarlo como una guía de teléfonos que contiene las direcciones de los microservicios. Para facilitarnos le implementación de dicho servicio Spring Cloud nos ofrece el componente Spring Cloud Netflix Eureka. Eureka es un servicio rest que permite al resto de microservicios registrarse en su directorio. Esto es muy importante, puesto que no es Eureka quien registra los microservicios, sino los microservicios los que solicitan registrarse en el Eureka. Cuando un microservicio registrado en Eureka arranca, envía un mensaje a Eureka indicándole que está disponible. El servidor Eureka almacenará la información de todos los microservicios registrados así como su estado. La comunicación entre cada microservicio y el servidor Eureka se realiza mediante heartbeats cada X segundos. Si Eureka no recibe un heartbeat de un tipo determinado pasados 3 intervalos, el microservicio será eliminado del registro. Además de llevar el registro de los microservicios activos, Eureka también ofrece al resto de microservicios la posibilidad de "descubrir" y acceder al resto de microservicios registrados. Por ello Eureka es considerado un servicio de registro y descubrimiento de miscroservicios Una vez entendido su funcionamiento vamos a pasar a la implementación y configuración de un Servicio Spring Cloud Eureka que permita registrar y monitorizar el resto de microservicios desplegados. EntornoEl tutorial paso a paso está escrito usando el siguiente entorno:
Creación del Servicio EurekaLo primero que haremos será crear nuestro proyecto Spring Boot. Para ello arrancamos nuestro IDE favorito (para este tutorial hemos utilizado IntelliJ IDEA Community Edition) y creamos un proyecto maven tal y cómo se muestra a continuación. Creación de un proyecto Maven con IntelliJ IDEADurante el proceso de creación del proyecto deberemos proporcionar parámetros básicos para todo proyecto maven, tales como groupId, artefactId o el directorio donde crear el proyecto. A continuación se muestra el estado del proyecto recién creado. Archivo pom.xml del proyecto recién creadoConfigurar el archivo pom.xmlTal y como hicimos cuando creamos el servidor de configuración en el anterior post, el siguiente paso para tener listo nuestro servicio Eureka es incluir en el archivo pom.xml todas las dependencias/librerías de las que hará uso el proyecto.
El archivo pom.xml quedará como se indica a continuación: Una vez definido el pom.xml el siguiente paso es importar las dependencias en maven y generar los archivos y librerías necesarios. Para ello haz click con el botón derecho en el archivo pom, selecciona Maven y haz click primero en ReImport y después en Generate Sources and Update Folders. Si no se produce ningún error, querrá decir que el archivo pom.xml del proyecto Maven está configurado correctamente. Crear el punto de entrada de nuestro servicio de registro y descubrimiento Spring Cloud Eureka Discovery ServerPara crear nuestro servicio Eureka necesitamos una clase Java que contenga toda la funcionalidad necesaria para permitir registrar microservicios. Para ello los creadores de Spring Cloud y Netflix a través de su plataforma OSS nos proporciona la anotación @EnableEurekaServer. Como base utilizaremos una aplicación Boot con un archivo de entrada (ApplicationEurekaServer.java), que estará anotado con @SpringBootApplication y con @EnableEurekaServer, además de definir una función main que arrancará el servicio. Para ello procederemos de la siguiente manera:
Configurar nuestro Spring Cloud Eureka Discovery ServerUna vez creada la clase ApplicationEurekaServer.java debemos llevar a cabo la configuración de nuestro servicio, para ello crearemos un archivo de configuración llamado application.yml que ubicaremos en la carpeta /src/main/resources/ Creación del archivo de configuración del servicio EurekaEn dicho archivo indicaremos parámetros genéricos a todos los servicios y otros específicos de Eureka tal y como se explica a continuación: https://gist.github.com/migueldoctor/11535f827e9caa1b3c39709ba6b59f7bEn primer lugar definimos el nombre del servicio, eureka-server en nuestro caso. El puerto en el que se ejecutará el servidor (8761). Para configurar el servidor Eureka debemos indicar que no queremos que se registre como servicio en sí mismo, es decir no queremos que se postule como cliente de Eureka. Para ello establecemos a "false" los campos registerWithEureka y fetchRegistry. Finalmente en cuanto a la configuración de Eureka como servidor, se establece 0 como el tiempo en "ms" que debe esperar para realizar la sincronización con los servicios disponibles al arrancar el servicio (por defecto serían 5 minutos). Arrancar el servicio Eureka y comprobar su funcionamientoPara comprobar que nuestro servicio Spring Cloud Eureka funciona correctamente simplemente abrimos una terminal, accedemos al directorio del proyecto y arrancamos el proceso como cualquier otra aplicación maven spring boot. O si preferimos usar el IDE, simplemente seleccionamos la clase ApplicationEurekaServer.java y pulsamos en el botón de “Run” tal y como se muestra a continuación: Iniciar el servicio Eureka desde el IDE IntelliJ IDEAUna vez arrancado, abrimos un navegador web y accedemos a la url http://localhost:8761 con lo que aparecerá ante nosotros la web de administración de Eureka indicando que no hay ningún servicio registrado. Web de administración del servicio de descubrimiento Spring Cloud EurekaEn el siguiente artículo…Pues con esto hemos realizado la configuración básica de nuestro servidor de registro y descubrimiento Spring Cloud Eureka Discovery Server. En el siguiente artículo (aquí) comentaremos como centralizar la configuración de nuestro recién creado servicio Eureka haciendo uso de nuestro servidor de configuración Spring Cloud Config, el cual creamos en un artículo anterior (aquí). Como siempre, todo el código implementado en este artículo está disponible en Github. Si tienes cualquier duda o comentario, no dudes en hacerlo, así como aplaudir el post si te ha gustado. |