Bird
Raised Fist0
NestJSframework~30 mins

Queue events and monitoring in NestJS - Mini Project: Build & Apply

Choose your learning style10 modes available
Queue Events and Monitoring in NestJS
📖 Scenario: You are building a simple task queue system in a NestJS application. You want to track when tasks are added to the queue and when they are completed. This helps you monitor the queue's activity and ensure tasks are processed correctly.
🎯 Goal: Create a NestJS service that manages a queue of tasks. You will add tasks to the queue, track events when tasks are added and completed, and print monitoring messages to the console.
📋 What You'll Learn
Create a queue array to hold task names
Add a configuration variable to count completed tasks
Implement functions to add tasks and mark them as completed with event logs
Print the current queue and completed task count
💡 Why This Matters
🌍 Real World
Monitoring queue events helps teams track task progress and system health in real-time, which is critical for reliable applications.
💼 Career
Understanding queue event handling and monitoring is essential for backend developers and DevOps engineers working with task processing systems.
Progress0 / 4 steps
1
Create the initial queue array
Create a variable called taskQueue and set it to an empty array to hold task names.
NestJS
Hint

Use const taskQueue: string[] = []; to create an empty array for tasks.

2
Add a completed task counter
Create a variable called completedCount and set it to 0 to count completed tasks.
NestJS
Hint

Use let completedCount = 0; to track how many tasks are done.

3
Implement add and complete task functions with event logs
Write a function called addTask that takes a taskName string, adds it to taskQueue, and logs "Task added: ". Write another function called completeTask that removes the first task from taskQueue, increments completedCount, and logs "Task completed: ".
NestJS
Hint

Use taskQueue.push(taskName) to add and taskQueue.shift() to remove the first task. Use console.log to print messages.

4
Print the queue and completed task count
Write two console.log statements: one to print "Current queue:" followed by the taskQueue array, and another to print "Completed tasks:" followed by the completedCount.
NestJS
Hint

Use console.log("Current queue:", taskQueue); and console.log("Completed tasks:", completedCount); to show the status.

Practice

(1/5)
1. What is the main purpose of using @OnQueueEvent decorators in NestJS queues?
easy
A. To delete jobs from the queue manually
B. To listen and react to specific queue events like job completion or failure
C. To configure the queue's concurrency settings
D. To create new queues dynamically at runtime

Solution

  1. Step 1: Understand the role of @OnQueueEvent

    This decorator is used to listen for events emitted by the queue, such as when a job completes or fails.
  2. Step 2: Identify what @OnQueueEvent does not do

    It does not create queues, configure concurrency, or delete jobs manually; it only listens to events.
  3. Final Answer:

    To listen and react to specific queue events like job completion or failure -> Option B
  4. Quick Check:

    @OnQueueEvent listens to events [OK]
Hint: Remember: @OnQueueEvent listens to queue events only [OK]
Common Mistakes:
  • Thinking it creates or deletes queues
  • Confusing event listening with queue configuration
  • Assuming it manages job concurrency
2. Which of the following is the correct syntax to listen for a 'completed' event in a NestJS queue using @OnQueueEvent?
easy
A. @OnQueueEvent('done') handleDone(job: Job) { // handle job completion }
B. @OnQueueEvent('complete') handleComplete(job: Job) { // handle job completion }
C. @OnQueueEvent('completed') handleCompleted(job: Job) { // handle job completion }
D. @OnQueueEvent('finished') handleFinished(job: Job) { // handle job completion }

Solution

  1. Step 1: Recall the exact event name for job completion

    The official event name emitted by NestJS queues for job completion is 'completed'.
  2. Step 2: Match the syntax with the correct event name

    The syntax must use @OnQueueEvent('completed') to listen properly.
  3. Final Answer:

    @OnQueueEvent('completed')\nhandleCompleted(job: Job) {\n // handle job completion\n} -> Option C
  4. Quick Check:

    Event name is 'completed' exactly [OK]
Hint: Use exact event names like 'completed' with @OnQueueEvent [OK]
Common Mistakes:
  • Using incorrect event names like 'complete' or 'done'
  • Misspelling the decorator syntax
  • Not passing the event name as a string
3. Given the following code snippet, what will be logged when a job fails in the queue?
@OnQueueEvent('failed')
handleFailed(job: Job, error: Error) {
  console.log(`Job ${job.id} failed with error: ${error.message}`);
}
medium
A. Job <job_id> failed with error: <error_message>
B. Job failed with error: <error_message>
C. Job <job_id> completed successfully
D. Error occurred but no job info logged

Solution

  1. Step 1: Analyze the event and handler parameters

    The handler listens to the 'failed' event and receives the job and error objects.
  2. 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: ".
  3. Final Answer:

    Job <job_id> failed with error: <error_message> -> Option A
  4. Quick Check:

    Failed event logs job id and error message [OK]
Hint: Failed event handlers get job and error objects [OK]
Common Mistakes:
  • Ignoring job id in the log message
  • Confusing 'failed' with 'completed' event
  • Logging incomplete error information
4. You wrote this event listener but it never triggers:
@OnQueueEvent('completed')
handleCompleted() {
  console.log('Job done');
}
What is the likely problem?
medium
A. The event name 'completed' is incorrect
B. You must call the handler manually after job completion
C. The method name must be 'onCompleted' instead of 'handleCompleted'
D. The handler is missing the job parameter to receive event data

Solution

  1. Step 1: Check the event handler signature

    Event handlers for 'completed' receive the job object as a parameter, but this method has none.
  2. Step 2: Understand why missing parameters cause no trigger

    Without the expected parameter, NestJS cannot properly call the handler, so it never triggers.
  3. Final Answer:

    The handler is missing the job parameter to receive event data -> Option D
  4. Quick Check:

    Event handlers need correct parameters [OK]
Hint: Always include expected parameters in event handlers [OK]
Common Mistakes:
  • Omitting parameters in event handlers
  • Changing event names incorrectly
  • Thinking handlers must be called manually
5. You want to monitor a NestJS queue to log when jobs are added, completed, or failed. Which combination of event listeners should you implement to cover these events effectively?
hard
A. Use @OnQueueEvent('waiting'), @OnQueueEvent('completed'), and @OnQueueEvent('failed')
B. Use @OnQueueEvent('added'), @OnQueueEvent('done'), and @OnQueueEvent('error')
C. Use @OnQueueEvent('start'), @OnQueueEvent('finish'), and @OnQueueEvent('fail')
D. Use @OnQueueEvent('enqueue'), @OnQueueEvent('success'), and @OnQueueEvent('failure')

Solution

  1. 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.
  2. 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'.
  3. Final Answer:

    Use @OnQueueEvent('waiting'), @OnQueueEvent('completed'), and @OnQueueEvent('failed') -> Option A
  4. Quick Check:

    Correct event names: waiting, completed, failed [OK]
Hint: Use official event names: waiting, completed, failed [OK]
Common Mistakes:
  • Using wrong event names not recognized by NestJS
  • Missing the 'waiting' event for job addition
  • Confusing 'failed' with 'fail' or 'error'
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard