Volver al inicio

Herramientas de Comunicación de Microservicios Kafka Feign

El artículo desglosa herramientas de interacción de microservicios: clientes HTTP síncronos WebClient y Feign, WebSocket en tiempo real, broker Kafka asíncrono. Describe reactividad de Reactor, garantías de entrega, ejemplos de código Flux. Recomendaciones para la selección basadas en carga y escenarios.

¿Cómo se comunican los microservicios: Kafka vs Feign vs WebClient
Advertisement 728x90

Microservicios: Protocolos y Herramientas de Comunicación

Los microservicios intercambian mensajes mediante dos modelos principales: síncrono a través de peticiones HTTP directas a los endpoints de otro servicio, y asíncrono mediante brokers como Kafka o RabbitMQ. En el modelo síncrono, el emisor espera una respuesta, sabiendo la URL y los endpoints del receptor. El modelo asíncrono usa temas (topics) para almacenar mensajes sin interacción directa.

El síncrono es ideal para escenarios de petición-respuesta, mientras que el asíncrono destaca en eventos donde la entrega fiable prima sobre la velocidad.

Clientes HTTP Síncronos

Para llamadas directas, destacan varias herramientas:

Google AdInline article slot
  • RestTemplate: Cliente bloqueante, simple pero desaconsejado en proyectos nuevos por el bloqueo de hilos.
  • WebClient: Reactivo basado en Project Reactor, no bloqueante, perfecto para sistemas de alto rendimiento con procesamiento asíncrono.
  • Feign Client: Declarativo: define una interfaz con anotaciones y Spring genera la implementación del cliente HTTP. Síncrono con soporte para caché, reduce el código repetitivo.

Feign lo simplifica todo: solo anota una interfaz con @GetMapping o @PostMapping y listo. WebClient lo supera en rendimiento gracias al I/O no bloqueante.

Programación Reactiva con WebClient

La reactividad en Project Reactor usa Mono (un valor único) y Flux (flujo de valores). Diferencias clave con el asíncrono tradicional:

  • Maneja flujos de datos en el tiempo con backpressure: los consumidores avisan a los productores cuando están listos.
  • Operadores declarativos como map, filter, flatMap y buffer para transformaciones.
  • Evaluación perezosa: las operaciones se ejecutan solo al suscribirse.

Ejemplo procesando usuarios de un repositorio:

Google AdInline article slot
Flux<User> users = userRepository.findAll();
Flux<String> names = users
    .filter(u -> u.getAge() > 18)
    .map(User::getName)
    .take(10);
names.subscribe(name -> {
    System.out.println("Received name: " + name);
});

Aquí, las consultas a la base de datos arrancan solo con .subscribe(). Reactor se integra perfectamente con Spring WebFlux para apps web reactivas. Úsalo en cargas altas o datos en streaming; quédate con herramientas síncronas para CRUD básico.

WebSocket para Intercambio Basado en Eventos

WebSocket crea una conexión persistente para intercambio bidireccional de eventos sin peticiones repetidas. Sin ciclo petición-respuesta: los servicios envían mensajes por el canal abierto.

Ideal para:

Google AdInline article slot
  • Chats y notificaciones en tiempo real.
  • Juegos y cotizaciones bursátiles con actualizaciones instantáneas.
  • Flujos de series temporales sin sondeo (polling).

Desventaja: sin garantías de entrega si cae la conexión. Todo se centra en la velocidad, no en fiabilidad absoluta.

Kafka: Broker de Mensajes Asíncrono

Kafka es un sistema distribuido para almacenar y transmitir eventos. Los productores envían a temas (logs particionados), los consumidores leen de particiones.

Garantías de entrega:

  • Al menos una vez: Los mensajes llegan al menos una vez (posibles duplicados en fallos de commit).
  • Exactamente una vez: Con productores idempotentes y transacciones.

La idempotencia asegura que peticiones repetidas den el mismo resultado. La replicación del broker evita pérdidas de datos. El orden se preserva dentro de particiones por clave (ej. ID de usuario).

Los grupos de consumidores distribuyen la carga: varios consumidores manejan particiones en paralelo.

Casos de uso de Kafka:

  • Eventos asíncronos como emails, analítica o bonificaciones.
  • Reproducir historial para recálculos.
  • Streaming (Kafka Streams, CDC de bases de datos).

Desventajas: Configuración compleja del clúster (KRaft la simplifica frente a ZooKeeper) y latencia mayor que HTTP.

Lecciones Clave

  • Elige Feign para llamadas síncronas simples con poco código.
  • Usa WebClient para sistemas reactivos de alta carga con Flux/Mono.
  • WebSocket para intercambio bidireccional en tiempo real sin garantías de entrega.
  • Kafka para comunicación asíncrona fiable basada en eventos con historial completo.
  • Combínalos: síncrono para CRUD, asíncrono para eventos.

— Editorial Team

Advertisement 728x90

Leer después