El objetivo de Eureka Server es localizar y registrar servicios con los que se desea interactuar, además nos ayuda con el balanceo de carga y la tolerancia a fallos. Para configurar Eureka Server deben existir al menos dos tipos de aplicaciones, una aplicación que funcione como servidor y otra como cliente.
Cada servicio debe comunicarse con el Servidor Eureka para decirle que está disponible para ser usado. Eureka Server guardará su información y su estado. A esta comunicación entre el microservicio y Eureka se le llama heartbeats y ocurre cada 30 segundos. Si 3 heartbeats fallan Eureka Server lo elimina de la lista.
Configurar el proyecto Eureka Server
Para la creación del proyecto podemos usar la herramienta de Spring Boot Initializr o usar el asistente del IDE que más nos agrade. Para este ejemplo se usará la versión 2.7.0 de Spring Boot.
Durante la creación del proyecto debemos asegurarnos de seleccionar “Eureka Discovery Client” para que nuestro proyecto pueda tener las librerías necesarias para realizar el ejemplo.
![Spring boot Initializr](https://funcionaenmimaquina.com/wp-content/uploads/2022/10/image.png)
Una vez creado el proyecto debemos configurar nuestro archivo de propiedades de la siguiente forma:
La configuración dentro del nodo Eureka evita que la aplicación Eureka Server se autorregistre, el nodo Spring da el nombre a la aplicación en la que estamos trabajando y el nodo Server indica el puerto en el que correra la aplicación, por convención a Eureka Server se le da dicho número de puerto.
Para finalizar debemos agregar la anotación @EnableEurekaServer
a nuestra clase que contiene nuestro método main.
Para probar la aplicación la ejecutamos y nos dirigimos la ruta http://localhost:8761 y podemos observar la siguiente pantalla:
![Eureka Server bashboard](https://funcionaenmimaquina.com/wp-content/uploads/2022/10/image-1-1002x1024.png)
Configuración de un Eureka Client
Para crear la aplicación que se conectara a Eureka Server seguimos un proceso similar al anterior. Usando el Spring Boot Initializr o el IDE de nuestra preferencia. Pero ahora debemos asegurarnos de seleccionar “Eureka Discovery Client” para que pueda ser registrada en Eureka server correctamente.
![Spring boot Initializr](https://funcionaenmimaquina.com/wp-content/uploads/2022/10/image-2.png)
Ahora configuramos el application.yml del Eureka Client de la siguiente forma:
Como lo vimos anteriormente, el nodo Spring application name es el que da el nombre a la aplicacion. Server port indica el puerto de comunicación en el que se levantara la aplicación, en este caso no ponemos un puerto concreto, sino que lo dejaremos dinámico. Ahora el nodo instance-id es necesario para poder correr en un puerto aleatorio distinto con un ID de instancia aleatoria distinta, en este caso instance-id se forma del nombre de la aplicación y un valor random.
Ahora debemos declarar en el metodo main que se trata de un Eureka Client:
Para probar que Eureka Server registra correctamente los servicios, levantamos primero Eureka Server y después podemos levantar dos veces la aplicación Eureka Client para verificar que los puertos no estén chocando y número de puerto e instancia sean aleatorios Ahora nos dirigimos la ruta http://localhost:8761 para hacer esta verificación.
Podemos notar que los puertos no chocaron y él tienen un ID aleatorio diferente cada uno y están correctamente registrados en Eureka Server.
Como consumir un servicio Eureka Client
Ahora vamos a construir un servicio que haga un request a nuestro servicio llamado Eureka Client. Para esto vamos a modificar un poco nuestro servicio Eureka Client agregando un Rest Controller y vamos a crear un nuevo servicio que funcione como cliente Rest. Para más detalle del proceso completo, leer el Tutorial de Spring Boot para principiantes donde se detallan pasos a seguir en la creación de un Servicio y Cliente Rest.
Rest Controller en Eureka Client
Dentro del Proyecto de Eureka Client vamos a crear primero un Objeto POJO que sera el que se retornara para que se visualice como resultado.
Después creamos una lógica de negocio dummy donde obtenemos una lista de Objetos de tipo Item.
Y lo enlazamos con el controller.
Spring Boot Cliente Feign
Ahora vamos a crear un nuevo proyecto que no servirá de cliente para nuestro Microservicio utilizando Feign
Creamos primero un objeto que represente Item también en este proyecto.
Ahora creamos el cliente Feign la propiedad name se pone el nombre del servicio tal como lo registramos en Eureka Server. Podrás notar que no se encuentra configurado ninguna URL o puerto dentro de esta conexión. Esto es gracias a Eureka y a que configuramos un puerto aleatorio en el Cliente Eureka. Ahora podemos levantar N cantidad de servicio con el puerto aleatorio y todo funcionará de manera transparente.
Creamos el Controller del cliente Feign y configuramos las propiedades del proyecto.
Nuestro ejemplo ahora esta listo para ser probado. Usando cualquier navegador podemos ir a la URL http://localhost:8002/listar y obtendremos un resultado como el siguiente.
![json response](https://funcionaenmimaquina.com/wp-content/uploads/2022/11/image.png)
Conclusiones
En este post pudimos ver como Eureka nos ayuda a escalar nuestros servicios, además de que la comunicación entre ellos es más fácil. Creamos un ejemplo para poder observar como se comporta y lo sencillo que es configurar Eureka Server. Ahora podemos utilizarlo para nuestros proyectos o para crear nuestro portafolio.