El patrón "Bus de Eventos" (Event Bus) es un enfoque arquitectónico que permite implementar la comunicación entre los componentes del sistema mediante la publicación y la escucha de eventos. En este caso, los componentes no conocen directamente entre sí, se produce una interacción débilmente acoplada según el principio de "publicador-suscriptor".
Uso: Este patrón es útil donde se necesita garantizar una interacción escalable y extensible entre múltiples módulos, por ejemplo, en aplicaciones web complejas, sistemas de escritorio, plataformas de microservicios.
Ejemplo de código en Python utilizando la biblioteca pyee:
from pyee import EventEmitter bus = EventEmitter() def on_user_created(user): print(f"Usuario creado: {user}") bus.on('user_created', on_user_created) bus.emit('user_created', {"id": 1, "nombre": "Iván"})
Características clave:
¿Todos los eventos en Event Bus deben ser persistentes?
No, no necesariamente. En la mayoría de los casos, el Event Bus opera con eventos efímeros que no se guardan. La persistencia solo es necesaria si es importante evitar la pérdida de eventos (por ejemplo, a través de Kafka).
¿Se perderá un evento si no hay suscriptores registrados en el momento de la publicación?
Sí, si el sistema no guarda eventos (efímeros), el evento se perderá. Para la entrega garantizada se necesita un Event Bus duradero (por ejemplo, RabbitMQ con colas persistentes).
¿Se puede utilizar un solo Event Bus para código sincrónico y asincrónico sin restricciones?
No, un Event Bus sincrónico puede bloquear el hilo hasta que todos los manejadores se completen, lo cual es inaceptable para alta carga. Para sistemas escalables se utilizan Event Bus asíncronos o se externaliza el procesamiento de eventos en procesos/hilos separados (por ejemplo, a través de Celery).