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