Bird
Raised Fist0
NestJSframework~10 mins

Queue events and monitoring in NestJS - Interactive Code Practice

Choose your learning style10 modes available
Practice - 5 Tasks
Answer the questions below
1fill in blank
easy

Complete the code to import the BullModule for a queue named 'email'.

NestJS
import { BullModule } from '@nestjs/bull';

@Module({
  imports: [BullModule.[1]({ name: 'email' })],
})
export class AppModule {}
Drag options to blanks, or click blank then click option'
AforRoot
BforFeature
CregisterQueue
DcreateQueue
Attempts:
3 left
💡 Hint
Common Mistakes
Using forRoot instead of forFeature
Trying to use a method that doesn't exist like createQueue
2fill in blank
medium

Complete the code to listen for the 'completed' event on a queue.

NestJS
import { OnQueueEvent } from '@nestjs/bull';

@Processor('email')
export class EmailProcessor {
  @OnQueueEvent('completed')
  handleCompleted(job: Job, result: any) {
    console.log(`Job ${job.[1] completed`);
  }
}
Drag options to blanks, or click blank then click option'
Aid
Bname
Cstatus
Dresult
Attempts:
3 left
💡 Hint
Common Mistakes
Using job.name which may not exist
Using job.status which is not a property
3fill in blank
hard

Fix the error in the event listener method to correctly handle failed jobs.

NestJS
@OnQueueEvent('failed')
handleFailed(job: Job, [1]: Error) {
  console.error(`Job ${job.id} failed with error:`, error.message);
}
Drag options to blanks, or click blank then click option'
Aerr
Bexception
Cerror
Dfail
Attempts:
3 left
💡 Hint
Common Mistakes
Using a different parameter name than the one used inside the method
Not matching the error parameter name
4fill in blank
hard

Fill both blanks to create a dictionary of job counts filtered by status.

NestJS
async getJobCounts() {
  const counts = await this.queue.getJobCounts('[1]', '[2]');
  return counts;
}
Drag options to blanks, or click blank then click option'
Awaiting
Bcompleted
Cfailed
Dactive
Attempts:
3 left
💡 Hint
Common Mistakes
Using statuses that are not valid keys for getJobCounts
Mixing up completed and failed statuses
5fill in blank
hard

Fill all three blanks to create a filtered dictionary of jobs with their IDs and timestamps.

NestJS
async getFilteredJobs() {
  const jobs = await this.queue.getJobs(['[1]', '[2]']);
  return jobs.map(job => ({ id: job.[3], timestamp: job.timestamp }));
}
Drag options to blanks, or click blank then click option'
Acompleted
Bfailed
Cid
Dwaiting
Attempts:
3 left
💡 Hint
Common Mistakes
Using invalid job status strings
Using wrong property name for job ID

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