Registro y Descubrimiento de Servicios con Nacos

1. Fundamentos del Registro y Descubrimiento de ServiciosEn arquitecturas de microservicios, existen dos componentes principales: los consumidores de servicios y los proveedores de servicios.

Proveedores de servicios: Exponen interfaces que otros microservicios pueden consumir

Consumidores de servicios: Invocan interfaces expuestas por otros microservicios

En proyectos de microservicios a gran escala, el número de proveedores puede ser significativo. Para gestionar estos servicios de manera eficiente, se requiere un centro de registro que los administre de forma centralizada. La relación entre consumidores, proveedores y el centro de registro es la siguiente:

  1. Los proveedores registran sus servicios en el centro de registro
  2. Los consumidores consultan el centro de registro cuando necesitan consumir un servicio
  3. Los seleccionan y consumen servicios según estrategias de balanceo de carga

2. Herramientas Principales para Gestión de Registros de Servicios

  • Eureka: Desarrollado por Netflix, integrado en SpringCloud, comúnmente utilizado en aplicaciones Java
  • Nacos: Desarrollado por Alibaba, integrado en SpringCloudAlibaba, diseñado para aplicaciones Java
  • Consul: Desarrollado por HashiCorp, integrado en SpringCloud, sin restricciones de lenguaje para microservicios

3. Centro de Registro NacosDebido a su origen chino, Nacos cuenta con documentación extensa en idioma chino y además ofrece funcionalidades de gestión de configuración, su adopción es particularmente alta en China. Por ello, nos centraremos en su implementación como centro de registro.

4. Implementación del Registro con Nacos

  1. Añadir dependencias

Ver código``` <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>


2. Configuración del archivo YAML

Ver código```
spring:
  application:
    name: inventario-service  # Nombre del servicio para registro en Nacos
  cloud:
    nacos:
      discovery: # Configuración de registro
        server-addr: 127.0.0.1:8848


  1. Verificación

El servicio se muestra correctamente registrado

5. Consumo de Servicios RemotosPara la invocación de servicios remotos, utilizaremos OpenFeign:

  1. Añadir dependencias

Ver código``` <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-openfeign</artifactId> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-loadbalancer</artifactId>


2. Crear módulo para manejar llamadas remotas En este caso, se desarrolló un módulo llamado api-cliente

3. Definir interfaz de cliente

Ver código```
package com.tienda.api.cliente;

import com.tienda.api.configuracion.ConfiguracionFeignPorDefecto;

import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.RequestParam;

import java.util.List;

@FeignClient(value = "servicio-carrito",configuration = ConfiguracionFeignPorDefecto.class)
public interface ClienteCarrito {
    @DeleteMapping("/carrito/elementos")
    void eliminarElementosPorIds(@RequestParam("ids") List<Long> identificadores);
}

Configuración de logging Ver código``` package com.tienda.api.configuracion;

import com.tienda.comun.utilidades.ContextoUsuario; import feign.Logger; import feign.RequestInterceptor; import lombok.extern.slf4j.Slf4j; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration;

@Configuraton @Slf4j public class ConfiguracionFeignPorDefecto {

@Bean
public Logger.Level nivelLogFeign(){
    return Logger.Level.FULL;
}

}


4. Importar dependencias Una vez creado el módulo api, se empaqueta en un jar y se importa como dependencia en el proyecto consumidor

5. Añadir anotación en clase principal

6. Realizar llamadas

Se puede inyectar directamente el clienteCarrito

La invocación se realiza correctamente, implementando la funcionalidad requerida

Etiquetas: Microservicios nacos registro-servicios openfeign spring-cloud

Publicado el 6-11 21:39