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.
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.
Supongamos una app de e-commerce. Tenemos dos microservicios:
PedidosServiceFacturacionServiceCuando 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.
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.