Spaces:
Sleeping
Sleeping
| const EventEmitter = require('events'); | |
| /** | |
| * Enterprise Decoupled EventBus | |
| * Utilizes Node's native high-performance EventEmitter. Can be easily swapped | |
| * with a Redis-backed Pub/Sub mechanism when scaling across physical container boundaries. | |
| */ | |
| class EventBus extends EventEmitter { | |
| constructor() { | |
| super(); | |
| this.logger = console; | |
| } | |
| /** | |
| * Emits an event onto the bus with an associated payload | |
| * @param {string} eventName | |
| * @param {object} payload | |
| */ | |
| publish(eventName, payload) { | |
| this.logger.log(`[EventBus] 📢 Publish topic "${eventName}":`, JSON.stringify(payload, null, 2)); | |
| this.emit(eventName, payload); | |
| } | |
| /** | |
| * Registers a subscriber for a specific event topic | |
| * @param {string} eventName | |
| * @param {function} handler | |
| */ | |
| subscribe(eventName, handler) { | |
| this.logger.log(`[EventBus] 📥 Subscribed to topic "${eventName}"`); | |
| this.on(eventName, handler); | |
| } | |
| } | |
| const eventBus = new EventBus(); | |
| module.exports = eventBus; | |