Configuración de un Centro de Registro y Enrutamiento con Spring Cloud Eureka y Gateway

Implementación del Servidor de Registro (Eureka Server)

Spring Cloud Eureka es el componente encargado de la gestión y el descubrimiento de servicios en una arquitectura de microservicios. A continuación, se detalla el proceso para configurar un nodo central de registro.

Definición de dependencias del proyecto

Se debe crear un proyecto Maven e incluir el starter correspondiente para el servidor Eureka, junto con la gestión de versiones de Spring Cloud.

<project>
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.arquitectura.microservicios</groupId>
    <artifactId>nodo-registro-eureka</artifactId>
    <version>1.0.0</version>
    <packaging>jar</packaging>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.1.2.RELEASE</version>
    </parent>

    <properties>
        <java.version>1.8</java.version>
        <spring-cloud.version>Greenwich.RELEASE</spring-cloud.version>
    </properties>

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

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>${spring-cloud.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
</project>

Clase de inicio del servidor

Es necesario anotar la clase principle con @EnableEurekaServer para activar las funcionalidades del registro.

package com.arquitectura.registro;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;

@EnableEurekaServer
@SpringBootApplication
public class NodoRegistroPrincipal {
    
    public static void ejecutarServidor(String[] argumentos) {
        SpringApplication.run(NodoRegistroPrincipal.class, argumentos);
    }

    public static void main(String[] args) {
        ejecutarServidor(args);
    }
}

Propiedades de configuración

En el archivo application.properties, se define el puerto y se deshabilita el auto-registro, ya que este nodo actuará como el servidor central.

spring.application.name=nodo-central-registro
server.port=8765

# Deshabilitar el auto-registro del servidor
eureka.client.register-with-eureka=false
eureka.client.fetch-registry=false

# Desactivar modo de protección para entornos de desarrollo
eureka.server.enable-self-preservation=false

# URL del clúster de registro (ejemplo de nodo secundario)
eureka.client.service-url.defaultZone=http://192.168.1.100:8766/eureka/

Al iniciar la aplicación, el panel de control de Eureka quedará accesible para monitorear los servicios registrados.

Registro de un Microservicio Cliente (Eureka Client)

Para validar el funcionamiento del servidor, se crea un microservicio básico que actuará como cliente y se registrará en el centro.

Dependencias del cliente

<project>
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.arquitectura.microservicios</groupId>
    <artifactId>servicio-inventario</artifactId>
    <version>1.0.0</version>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.1.2.RELEASE</version>
    </parent>

    <properties>
        <java.version>1.8</java.version>
        <spring-cloud.version>Greenwich.RELEASE</spring-cloud.version>
    </properties>

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

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>${spring-cloud.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>
</project>

Configuración del cliente

Se configuran los parámetros para que el servicio se registre correctamente y exponga su dirección IP real.

spring.application.name=servicio-inventario
server.port=8081

eureka.client.register-with-eureka=true
eureka.client.fetch-registry=true
eureka.client.server.wait-time-in-ms-when-sync-empty=0

# Apuntar al servidor de registro configurado previamente
eureka.client.service-url.defaultZone=http://192.168.1.100:8765/eureka/

# Preferir la dirección IP real del contenedor o servidor
eureka.instance.prefer-ip-address=true
eureka.instance.instance-id=inventario-app:8081

Configuración del Enrutador (Spring Cloud Gateway)

Spring Cloud Gateway proporciona una ruta única y unificada para acceder a los distintos microservicios, gestionando el enrutamiento dinámico basado en el descubrimiento de servicios.

Dependencias del Gateway

<project>
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.arquitectura.microservicios</groupId>
    <artifactId>enrutador-api-gateway</artifactId>
    <version>1.0.0</version>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.1.2.RELEASE</version>
    </parent>

    <properties>
        <java.version>1.8</java.version>
        <spring-cloud.version>Greenwich.RELEASE</spring-cloud.version>
    </properties>

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

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>${spring-cloud.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>
</project>

Propiedades de enrutamiento

Se habilita la función de localizador de descubrimiento para que el gateway genere rutas automáticamente basadas en los nombres de los servicios registrados en Eureka.

spring.application.name=enrutador-perimetral
server.port=9090
server.tomcat.uri-encoding=UTF-8

# Habilitar el descubrimiento automático de rutas a través de Eureka
spring.cloud.gateway.discovery.locator.enabled=true

# Convertir los identificadores de servicio a minúsculas para las rutas
spring.cloud.gateway.discovery.locator.lower-case-service-id=true

Una vez iniciado el gateway, las peticiones HTTP entrantes serán interceptadas, evaluadas y reenviadas dinámicamente a los microservicios correspondientes según las reglas de enrutamiento configuradas.

Etiquetas: spring-cloud-eureka spring-cloud-gateway spring-boot arquitectura-microservicios descubrimiento-servicios

Publicado el 7-20 18:38