3 visitas

Cómo conectar microservicios con eventos: Introducción a la arquitectura Event-Driven

Descubrí cómo los microservicios pueden comunicarse sin acoplarse entre sí usando eventos, colas y un broker como RabbitMQ o Kafka.

En una arquitectura de microservicios tradicional basada en HTTP, cada servicio debe conocer las rutas y contratos del resto. Esto genera acoplamiento, problemas de escalabilidad y dependencias difíciles de mantener. La Event-Driven Architecture (EDA) propone otra forma: los microservicios se comunican a través de eventos, sin saber quién los recibe.

¿Qué es un evento?

Un evento representa algo que ocurrió en el sistema, por ejemplo: “un usuario se registró”, “una factura fue pagada” o “un pedido fue enviado”. Los servicios publican esos eventos en un broker de mensajes (Kafka, RabbitMQ, Redis Streams, etc.) y otros servicios los suscriben para reaccionar.

Caso real: facturación automática

Supongamos una app de e-commerce. Tenemos dos microservicios:

  • PedidosService
  • FacturacionService

Cuando un pedido se completa, el servicio de pedidos publica un evento:

// PedidosService
$evento = [
    'tipo' => 'pedido.completado',
    'datos' => ['pedido_id' => 153, 'usuario_id' => 21]
];

$broker->publicar('pedidos', json_encode($evento));

Luego, el servicio de facturación escucha la cola pedidos:

// FacturacionService
$broker->suscribirse('pedidos', function (string $mensaje) {
    $evento = json_decode($mensaje, true);

    if ($evento['tipo'] === 'pedido.completado') {
        $this->generarFactura($evento['datos']['pedido_id']);
    }
});

Así, FacturacionService no conoce al servicio de pedidos. Solo reacciona a eventos. Esto permite agregar nuevos servicios (por ejemplo, NotificacionesService) sin tocar código existente.

Ventajas

  • Bajo acoplamiento entre microservicios
  • Escalabilidad horizontal más simple
  • Tolerancia a fallos
  • Extensibilidad sin afectar lo existente

EDA es la base de sistemas como Uber, Netflix o Mercado Libre, donde los servicios intercambian millones de eventos por segundo.

Me dedico a crear soluciones web eficientes y a compartir mi conocimiento con la comunidad de desarrolladores.

Alejandro Leone
Backend Developer