Eureka Service Discovery: Registro de microservicios en Spring Boot

Cuando trabajamos con arquitectura de microservicios, uno de los mayores retos es saber dónde está cada servicio en cada momento. ¿Cómo se conectan entre ellos si sus ubicaciones pueden cambiar? Aquí entra en juego un componente clave: el Discovery Service. En este post vamos a explicarte qué es, qué patrones existen y cómo Spring nos lo pone fácil con Eureka Discovery Service.

 

 

¿Qué es un Discovery Service?

 

Un "Discovery Service" (o "Service Registry") es un registro centralizado donde cada microservicio se anota con su dirección IP y puerto. En vez de codificar a mano estas direcciones, los servicios se registran y se descubren automáticamente. Esto facilita enormemente la escalabilidad, el balanceo de carga y la tolerancia a fallos.

 

✅ Beneficios principales:

  • Evita el uso de direcciones hardcodeadas.

  • Permite descubrir dinámicamente nuevos servicios.

  • Mejora la resiliencia ante fallos y reinicios.

  • Facilita el balanceo de carga.

     

Patrones de Service Discovery: CSSD y SSSD

 

Cuando hablamos de patrones de funcionamiento de un Service Discovery, podemos decir que existen dos grandes estrategias para gestionar el descubrimiento de servicios:

 

🔹 Client Side Service Discovery (CSSD)

El cliente (es decir, el microservicio que realiza una petición) consulta el registro, filtra las instancias disponibles y decide a cuál conectarse. También aplica su propia lógica de balanceo de carga.

🛠 Herramientas: Eureka Client, Consul, Zookeeper
🎯 Ideal para: Aplicaciones de tamaño medio

 

🔹 Server Side Service Discovery (SSSD)

Aquí, el cliente no se preocupa del descubrimiento. Llama a un balanceador de carga, que es el encargado de consultar el Discovery Service y redirigir la petición al servidor adecuado.

🛠 Herramientas: Nginx, AWS ELB, Azure Load Balancer
🎯 Ideal para: Sistemas grandes con miles de peticiones por segundo

 

 

¿Qué es Eureka?

 

Eureka es una solución de "Service Discovery" creada por Netflix y completamente integrada en Spring Cloud. Es simple, eficaz y muy extendida en entornos Spring Boot.

 

🔎 ¿Para qué sirve?

  • Registro automático de microservicios.

  • Descubrimiento dinámico de endpoints.

  • Sincronización entre múltiples servidores Eureka.

  • Integración directa con clientes y balanceadores Spring.

 

 

Componentes de Eureka Discovery Service

 

Aunque en una aplicación hay que considerar Eureka Discovery Service como un todo, en realidad Eureka se divide en tres piezas fundamentales:

 

1. Eureka Server

 

Es el registro central de servicios. Cada microservicio se registra aquí al arrancar. Se puede acceder a través de un panel web ubicado en el endpoint que indiquemos. El puerto por defecto es el 8761, aunque es configurable.

http://localhost:8761

 

👉 Configuración de un servicio Spring Boot como Eureka Server:


@SpringBootApplication
@EnableEurekaServer
public class EurekaServerApp {
    public static void main(String[] args) {
        SpringApplication.run(EurekaServerApp.class, args);
    }
}

 

👉 Dependencia necesaria en pom.xml:

 
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
 

 

👉 Configuración básica en application.properties:

 
server.port=8761
eureka.client.fetch-registry=false
eureka.client.register-with-eureka=false
 

2. Eureka Client

 

Una vez tenemos configurado el Eureka Server, cada microservicio que queremos registrar debe ser configurado como un Eureka Client. 

Necesita la siguiente dependencia en su pom.xml:

 

 
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
 

 

Y su configuración en application.properties:

 
 
spring.application.name=servicio-ejemplo
eureka.client.register-with-eureka=true
eureka.client.fetch-registry=true
eureka.client.service-url.defaultZone=http://localhost:8761/eureka/
 
 
 

3. Load Balancer

 

Se encarga de elegir dinámicamente una instancia de servicio disponible (por ejemplo, cuando hay varias réplicas del mismo microservicio). Esto permite distribuir la carga.

  • En Spring Web, el framework ofrece integración con el Load Balancer mediante @LoadBalanced y el cliente "WebClient". 
  • En Spring Cloud, si vamos a utilizar el cliente "OpenFeignClient" entonces el Load Balancer viene integrado de forma automática.

 

 

Modos de funcionamiento: standalone y cluster

 

🟢 Modo Standalone

En este caso, nuestra aplicación va a trabajar con un único servidor Eureka. Es útil para entornos sencillos o para entornos de desarrollo/pruebas.

 

 
eureka.client.fetch-registry=false 
 

 

🔵 Modo Cluster (Alta Disponibilidad)

En este caso, vamos a utilizar varios servidores Eureka sincronizados entre sí. Cada uno se conecta al resto para compartir el registro de servicios. Si uno cae, otro lo sustituye.

 

 
eureka.client.fetch-registry=true
eureka.client.service-url.defaultZone=http://eureka2:8761/eureka/
 
 

Esto es esencial en producción, donde la disponibilidad es crítica.

 

 

Ventajas de usar Eureka en microservicios

 
Aunque supongo que será evidente para los que ya habéis trabajado con Eureka, vamos a hacer un repaso de las ventajas de Eureka para aquellos que nunca hayáis utilizado este Discovery Service. 

Escalabilidad dinámica: los servicios pueden escalar horizontalmente sin necesidad de actualizar rutas manualmente.

Alta disponibilidad: con varios Eureka Servers replicados, el sistema es resiliente.

Menos configuración manual: sin hardcodear direcciones IP ni puertos.

Balanceo de carga inteligente: Spring Cloud integra Eureka con sus propios mecanismos de balanceo.

Despliegue distribuido: cada región o zona puede tener su propio Eureka sincronizado con los demás.

 

Acceso a los servicios registrados en Eureka

 

Una vez tengamos configurado todos los componentes de Eureka en nuestra aplicación, podremos ver los servicios registrados en el panel de Eureka. Cuando levantas un servidor Eureka, puedes ver su dashboard web en:

http://localhost:8761/

 

👉 Ahí verás una lista de servicios registrados, como por ejemplo algo así:

 

Por otra parte, si queremos acceder a los servicios registrados desde otro microservicio, puedes consultarlos usando "DiscoveryClient":


 
private DiscoveryClient discoveryClient;

public String obtenerURLServicio(String nombreServicio) {
    List<ServiceInstance> instances = discoveryClient.getInstances(nombreServicio);
    return instances.get(0).getUri().toString();
}




Conclusión

 

En el mundo real, las IPs cambian, los servicios escalan y a veces fallan. Un Service Discovery como Eureka es lo que mantiene el orden dentro del caos. Gracias a su integración con Spring Boot, puedes tener un sistema de descubrimiento potente, automatizado y tolerante a fallos con sólo unas pocas líneas de configuración.

¡Nos vemos en el siguiente post!

Saludos.

 

Comentarios

Entradas populares de este blog

Componentes y Ventanas de Java Swing

Configurar Apache Tomcat en Eclipse

Creación de Webservice SOAP mediante Anotaciones