What if you could see every task's status instantly and never miss a problem again?
Why Queue events and monitoring in NestJS? - Purpose & Use Cases
Imagine you have a busy restaurant kitchen where orders come in constantly. Without a system to track which orders are cooking, which are ready, and which need attention, the kitchen staff would be overwhelmed and confused.
Manually checking each order's status or guessing which tasks are done leads to mistakes, delays, and unhappy customers. It's slow and stressful to keep track without clear signals or alerts.
Queue events and monitoring act like a smart kitchen display that shows real-time updates on every order. It tells you when a task starts, finishes, or fails, so you can react quickly and keep everything running smoothly.
function processOrder(order) {
// no feedback on status
cook(order);
serve(order);
}queue.on('completed', (job) => console.log(`Order ${job.id} done`)); queue.on('failed', (job) => console.log(`Order ${job.id} failed`));
It enables real-time tracking and quick response to problems, making your system reliable and efficient.
In an online store, monitoring queue events helps notify customers instantly when their order is shipped or if there's a delay, improving trust and satisfaction.
Manual tracking is slow and error-prone.
Queue events provide clear, real-time updates.
Monitoring helps catch issues early and improve service.
Practice
@OnQueueEvent decorators in NestJS queues?Solution
Step 1: Understand the role of
This decorator is used to listen for events emitted by the queue, such as when a job completes or fails.@OnQueueEventStep 2: Identify what
It does not create queues, configure concurrency, or delete jobs manually; it only listens to events.@OnQueueEventdoes not doFinal Answer:
To listen and react to specific queue events like job completion or failure -> Option BQuick Check:
@OnQueueEventlistens to events [OK]
@OnQueueEvent listens to queue events only [OK]- Thinking it creates or deletes queues
- Confusing event listening with queue configuration
- Assuming it manages job concurrency
@OnQueueEvent?Solution
Step 1: Recall the exact event name for job completion
The official event name emitted by NestJS queues for job completion is 'completed'.Step 2: Match the syntax with the correct event name
The syntax must use@OnQueueEvent('completed')to listen properly.Final Answer:
@OnQueueEvent('completed')\nhandleCompleted(job: Job) {\n // handle job completion\n} -> Option CQuick Check:
Event name is 'completed' exactly [OK]
@OnQueueEvent [OK]- Using incorrect event names like 'complete' or 'done'
- Misspelling the decorator syntax
- Not passing the event name as a string
@OnQueueEvent('failed')
handleFailed(job: Job, error: Error) {
console.log(`Job ${job.id} failed with error: ${error.message}`);
}Solution
Step 1: Analyze the event and handler parameters
The handler listens to the 'failed' event and receives the job and error objects.Step 2: Understand the console.log output
The log prints the job's id and the error's message in the format: "Job failed with error: ".Final Answer:
Job <job_id> failed with error: <error_message> -> Option AQuick Check:
Failed event logs job id and error message [OK]
- Ignoring job id in the log message
- Confusing 'failed' with 'completed' event
- Logging incomplete error information
@OnQueueEvent('completed')
handleCompleted() {
console.log('Job done');
} What is the likely problem?Solution
Step 1: Check the event handler signature
Event handlers for 'completed' receive the job object as a parameter, but this method has none.Step 2: Understand why missing parameters cause no trigger
Without the expected parameter, NestJS cannot properly call the handler, so it never triggers.Final Answer:
The handler is missing the job parameter to receive event data -> Option DQuick Check:
Event handlers need correct parameters [OK]
- Omitting parameters in event handlers
- Changing event names incorrectly
- Thinking handlers must be called manually
Solution
Step 1: Identify correct event names for job lifecycle
In NestJS queues, 'waiting' is emitted when a job is added, 'completed' when done, and 'failed' on failure.Step 2: Verify the other options' event names
Other options use incorrect or non-existent event names like 'added', 'done', 'error', 'start', 'finish', 'fail', 'enqueue', 'success', 'failure'.Final Answer:
Use @OnQueueEvent('waiting'), @OnQueueEvent('completed'), and @OnQueueEvent('failed') -> Option AQuick Check:
Correct event names: waiting, completed, failed [OK]
- Using wrong event names not recognized by NestJS
- Missing the 'waiting' event for job addition
- Confusing 'failed' with 'fail' or 'error'
Ready to prove it?
Pass the test and this pattern moves unknown
