Publicar y suscribirse

Eventos con brokers

Avisar que algo pasó y que cada interesado haga lo suyo: consumidores distintos, desacoplados y a su propio ritmo.

→ avanzar · S notas del orador · F pantalla completa · O vista general

Deslizá hacia abajo para recorrerla. Las simulaciones se activan al llegar a cada una.

Qué viaja

Comando vs. evento

📨 Comando "hacé esto"

mensaje
GenerarFactura → orden #1234
  • Es un pedido de trabajo.
  • Lo hace uno: el que sabe facturar.
  • El que pide sabe a quién se lo pide.
Lo que vimos la clase pasada: una cola y workers iguales.

📣 Evento "esto pasó"

evento
OrdenCreada → orden #1234
  • Es un hecho que ya ocurrió.
  • Le llega a todos los interesados, y cada uno hace lo suyo.
  • El que publica no sabe quién escucha.
Facturación factura, Stock descuenta, Mails avisa, Analytics registra.
Sin broker

Órdenes llama a cada uno y espera

👆 clic en un servicio para apagarlo

El cliente pide una orden. Órdenes llama en serie a Facturación, Stock, Mails y Analytics, y recién cuando todos responden le contesta al cliente.

  • Si Mails se cae, el cliente recibe un 503, aunque mandar el mail no era urgente.
  • La respuesta tarda lo que tardan todos juntos.
  • Sumar un servicio nuevo obliga a cambiar y redesplegar Órdenes.
Con broker

Publicar una vez, que le llegue a cada uno

un evento → una copia para cada suscriptor

Órdenes publica OrdenCreada en el broker y le contesta al cliente apenas el broker la acepta. El broker deja una copia en la cola de cada suscriptor.

  • En la cola, cada mensaje lo toma uno. Acá, cada suscriptor recibe su copia.
  • Los suscriptores son distintos entre sí: cada uno hace otra cosa.
  • Sumar a Fraude no toca a Órdenes: solo se suscribe.
Heterogéneos

Cada suscriptor va a su ritmo

Analytics es lento: su carril crece

Analytics tarda 1,2 s por evento y llegan 1,5 por segundo: se atrasa. Los demás ni se enteran.

Atraso por suscriptor (eventos sin procesar)
  • Heterogéneos entre sí: cada uno hace otra cosa y tarda distinto.
  • Homogéneos adentro: las réplicas de Analytics se reparten su cola, como los workers de la clase anterior.
Consistencia eventual

Por un momento, no todos están al día

🛒 creá una orden y mirá los contadores

La orden ya existe, pero Stock todavía no procesó el evento. Durante esa ventana, los datos no coinciden.

0Órdenes creadas
0Stock descontado
  • Tarde o temprano todos coinciden: consistencia eventual.
  • El diseño tiene que tolerar esa ventana (por ejemplo, reservar stock antes de confirmar).
Reacciones en cadena

Un evento dispara otro

OrdenCreadaFacturaEmitida

Facturación escucha OrdenCreada y, cuando termina, publica FacturaEmitida. Mails escucha ese segundo evento para mandar la factura.

  • Nadie escribió el flujo completo en un solo lugar: surge de quién escucha qué.
  • Fácil de extender, pero más difícil de seguir qué pasó con una orden.
Lo que se complica

El costo del desacople

🔍

Seguir qué pasó

El flujo está repartido entre suscriptores. Hace falta un id de correlación y trazas para reconstruir la historia de una orden.

📐

El formato del evento es un contrato

Cambiar un campo de OrdenCreada puede romper a suscriptores que ni conocés. Versionar con cuidado.

🔁

Duplicados y orden

Lo mismo que en las colas: cada suscriptor tiene que ser idempotente y no asumir el orden.

☠

Un suscriptor que falla siempre

Reintentos y DLQ por suscriptor, para que un evento roto no frene a ese consumidor para siempre.

⏳

Consistencia eventual

Por un rato, no todos están al día. El diseño y la interfaz tienen que tolerarlo.

🧩

Una pieza más

El broker hay que operarlo, monitorearlo y hacerlo resistente a fallas: si se cae, nadie se entera de nada.

Resumen

Cola de mensajes vs. broker de eventos

📨 Cola de mensajes

  • Qué viaja: un pedido de trabajo ("hacé esto").
  • Cuántos lo reciben: uno.
  • Consumidores: iguales entre sí (homogéneos), compiten por los mensajes.
  • Para qué: repartir trabajo y amortiguar carga.

📣 Broker de eventos

  • Qué viaja: un hecho que pasó ("esto ocurrió").
  • Cuántos lo reciben: todos los interesados, cada uno su copia.
  • Consumidores: distintos entre sí (heterogéneos); adentro de cada uno, réplicas iguales.
  • Para qué: que un cambio se propague sin acoplar a los servicios.

En la práctica: Kafka · RabbitMQ (exchanges fanout/topic) · Amazon SNS + SQS / EventBridge · Google Pub/Sub · Azure Service Bus topics / Event Grid