Create Custom Events
In BullMQ, creating a generic distributed realtime event emitter is possible by using our QueueEventsProducer class.
Consumers must use QueueEvents class to subscribe to those events that they are interested in.
typescript
const queueName = 'customQueue';
const queueEventsProducer = new QueueEventsProducer(queueName, {
connection,
});
const queueEvents = new QueueEvents(queueName, {
connection,
});
interface CustomListener extends QueueEventsListener {
example: (args: { custom: string }, id: string) => void;
}
queueEvents.on<CustomListener>('example', async ({ custom }) => {
// custom logic
});
interface CustomEventPayload {
eventName: string;
custom: string;
}
await queueEventsProducer.publishEvent<CustomEventPayload>({
eventName: 'example',
custom: 'value',
});python
from bullmq import QueueEvents, QueueEventsProducer
queueName = "customQueue"
queueEventsProducer = QueueEventsProducer(queueName, {
"connection": connection,
})
queueEvents = QueueEvents(queueName, {
"connection": connection,
})
def on_example(args, id):
custom = args["custom"]
# custom logic
queueEvents.on("example", on_example)
await queueEventsProducer.publishEvent({
"eventName": "example",
"custom": "value",
})Only eventName attribute is required.
WARNING
Some event names are reserved from Queue Listener API Reference.