Registro de Servicios y Gestión de Configuración con Nacos

Fundamentos de los Centros de Registro de Servicios

En arquitecturas de microservicios, la comunicación entre servicios requiere gestión dinámica de ubicaciones. Un centro de registro resuelve el acoplamietno directo evitando configuraciones estáticas de IP/puerto en servicios consumidores.

Introducción a Nacos

Nacos (Dynamic Naming and Configuraton Service) es una plataforma para:

  • Descubrimiento dinámico de servicios
  • Gestión centralizada de configuraciones
  • Administración de servicios

Instalación

Linux/macOS

tar -zxvf nacos-server-2.0.4.tar.gz
cd nacos/bin
./startup.sh -m standalone

Windows

startup.cmd -m standalone

Registro de Servicios

Proveedor de Servicio

@SpringBootApplication
public class ProveedorApp {
    public static void main(String[] args) {
        SpringApplication.run(ProveedorApp.class, args);
    }
}
# application.properties
spring.application.name=servicio-proveedor
spring.cloud.nacos.discovery.server-addr=localhost:8848
server.port=8080

Consumidor de Servicio

@RestController
public class ClienteControlador {
    @Autowired
    private DiscoveryClient descubrimiento;

    @GetMapping("/endpoint")
    public String obtenerDatos() {
        ServiceInstance instancia = descubrimiento.getInstances("servicio-proveedor").get(0);
        return "http://" + instancia.getHost() + ":" + instancia.getPort() + "/ruta";
    }
}

Balanceo de Carga

Configuración Básica

@Configuration
public class BalanceadorConfig {
    @Bean
    @LoadBalanced
    public RestTemplate plantillaRest() {
        return new RestTemplate();
    }
}

Estrategias Avanzadas

@Bean
public ReactorLoadBalancer<ServiceInstance> balanceadorPonderado(...) {
    return new NacosLoadBalancer(..., propiedadesNacos);
}

Integración con Feign

@FeignClient("servicio-proveedor")
public interface ClienteProveedor {
    @GetMapping("/recurso")
    String obtenerRecurso();
}

Configuración Centralizada

spring.cloud.nacos.config.server-addr=localhost:8848
spring.config.import=nacos:${spring.application.name}
@RefreshScope
@RestController
public class ConfigControlador {
    @Value("${parametro.config}")
    private String valorParametro;
}

Perisstencia con MySQL

-- Ejecutar script nacos-mysql.sql
CREATE DATABASE nacos;
USE nacos;
-- Tablas de configuración...
# application.properties de Nacos
spring.datasource.platform=mysql
db.url.0=jdbc:mysql://localhost:3306/nacos?useSSL=false
db.user=root
db.password=clave

Etiquetas: nacos Spring Cloud Microservicios DiscoveryClient LoadBalancer

Publicado el 6-4 04:08