A simple event bus powered by redis to communicate between multiple node instances.
npm install --save node-redis-eventbus
//or
yarn add node-redis-eventbus
//Wrap example by an async function
(async () => {
//Create new event bus instance with a unique identifier
const eventBus = await EventBus.create('myEventBus');
//Add listener and wait until it's binded successfully
await eventBus.on('msg', (payload) => {
console.log(`Received message: ${payload}`);
eventBus.destory();
process.exit();
});
console.log('Listening to msg event');
setTimeout(() => {
//Emit event to all listeners on the 'msg' event
eventBus.emit('msg', 'Hello');
}, 5000);
})();
//Somewhere else in your code get reference to the event bus
const eventBus = EventBus.getByName('myEventBus');
eventBus.emit('msg', 'Hello?');
//Create new event bus instance with a unique identifier
EventBus.create('myEventBus').then((eventBus) => {
//Add listener and wait until it's binded successfully
eventBus.on('msg', (payload) => {
console.log(`Received message: ${payload}`);
eventBus.destory();
process.exit();
}).then(() => {
console.log('Listening to msg event');
setTimeout(() => {
eventBus.emit('msg', 'Hello');
}, 5000);
})
})
//Somewhere else in your code get reference to the event bus
const eventBus = EventBus.getByName('myEventBus');
eventBus.emit('msg', 'Hello?');
//Register listener for specific event. To avoid sideeffects, you have to wait for the promise to resolve
on<T>(event: string, callback: (payload: T) => void): Promise<void>;
//Emit event on the event bus with passed payload
emit<T>(event: string, payload: T): void;
//Sends ping to all listeners and waits maximum <timeout> milliseconds
//Returns true if at least <minResponseCount> clients responded, false otherwise
ping(timeout?: number, minResponseCount?: number): Promise<boolean>;
//Destroy this event bus instance and disconnect from redis
//Watch out: If there are other clients connected, these instances will not be destroyed!
destroy(): void;
//Property which indicated wether the event bus is connected
connected: boolean;
//Creates a new event bus with a unique name and optional node-redis client options
static create(name: string, clientOpts?: Redis.ClientOpts): Promise<EventBus>;
//Access existing event bus instance by unique name
static getByName(name: string): EventBus;
This package automatically ships a d.ts
definition file!