Bird
Raised Fist0
NestJSframework~20 mins

Queue producers in NestJS - Practice Problems & Coding Challenges

Choose your learning style10 modes available
Challenge - 5 Problems
🎖️
Queue Producer Mastery
Get all challenges correct to earn this badge!
Test your skills under time pressure!
❓ component_behavior
intermediate
2:00remaining
What happens when a message is sent to a NestJS queue producer?

Consider a NestJS service using a queue producer to send messages. What is the expected behavior when this.queueProducer.send('task', { data: 123 }) is called?

NestJS
import { Injectable } from '@nestjs/common';
import { ClientProxy } from '@nestjs/microservices';

@Injectable()
export class TaskService {
  constructor(private readonly queueProducer: ClientProxy) {}

  async sendTask() {
    await this.queueProducer.send('task', { data: 123 }).toPromise();
  }
}
AThe message { data: 123 } is sent to the 'task' queue and the method waits for a response.
BThe message is logged locally but not sent to any queue.
CThe method throws a runtime error because send() does not exist on ClientProxy.
DThe message is sent but the method does not wait for any acknowledgment or response.
Attempts:
2 left
💡 Hint

Remember that send() returns an Observable that you can convert to a Promise to wait for a response.

📝 Syntax
intermediate
2:00remaining
Identify the correct syntax to inject a queue producer in a NestJS service

Which option shows the correct way to inject a queue producer client proxy named 'TASK_QUEUE' into a NestJS service constructor?

Aconstructor(@InjectQueue('TASK_QUEUE') private readonly client: ClientProxy) {}
Bconstructor(private readonly client: ClientProxy('TASK_QUEUE')) {}
Cconstructor(@InjectClient('TASK_QUEUE') private client: ClientProxy) {}
Dconstructor(@Inject('TASK_QUEUE') private readonly client: ClientProxy) {}
Attempts:
2 left
💡 Hint

Use the @Inject() decorator with the token name to inject providers.

🔧 Debug
advanced
2:00remaining
Why does this NestJS queue producer code fail to send a message?

Given the following code snippet, why does calling sendTask() fail to send the message?

NestJS
import { Injectable } from '@nestjs/common';
import { ClientProxy } from '@nestjs/microservices';

@Injectable()
export class TaskService {
  constructor(private readonly client: ClientProxy) {}

  sendTask() {
    this.client.send('task', { id: 1 });
  }
}
ABecause <code>ClientProxy</code> must be injected with a token, and here it is injected directly causing undefined client.
BBecause <code>send()</code> requires a callback function as the third argument, which is missing.
CBecause <code>send()</code> returns an Observable and the code does not subscribe or await it, causing no message to be sent.
DBecause <code>send()</code> is not a method of <code>ClientProxy</code> and causes a TypeError.
Attempts:
2 left
💡 Hint

Think about how Observables work in NestJS microservices.

❓ state_output
advanced
2:00remaining
What is the value of response after sending a message with a NestJS queue producer?

Assuming the queue consumer replies with { status: 'ok' }, what will be the value of response after this code runs?

NestJS
const response = await client.send('task', { id: 42 }).toPromise();
A{ status: 'ok' }
Bundefined
CAn Observable object
DA Promise object
Attempts:
2 left
💡 Hint

Remember that send() returns an Observable and toPromise() waits for the response.

🧠 Conceptual
expert
2:00remaining
Which statement best describes the role of a queue producer in NestJS microservices?

Choose the most accurate description of what a queue producer does in a NestJS microservice architecture.

AIt listens for incoming messages from clients and processes them synchronously.
BIt sends messages to a message broker queue to trigger asynchronous processing by consumers.
CIt manages database transactions and ensures data consistency across services.
DIt acts as a web server handling HTTP requests and responses.
Attempts:
2 left
💡 Hint

Think about the producer-consumer pattern in messaging systems.

Practice

(1/5)
1. What is the main role of a queue producer in a NestJS application?
easy
A. To monitor the queue status and logs
B. To process tasks received from the queue
C. To delete completed tasks from the queue
D. To send tasks or messages to a queue for later processing

Solution

  1. Step 1: Understand the role of queue producer

    A queue producer is responsible for sending tasks or messages to a queue, not processing them.
  2. Step 2: Differentiate producer from consumer

    Consumers process tasks, while producers only add tasks to the queue.
  3. Final Answer:

    To send tasks or messages to a queue for later processing -> Option D
  4. Quick Check:

    Queue producer = sends tasks [OK]
Hint: Producers add tasks; consumers process them [OK]
Common Mistakes:
  • Confusing producer with consumer
  • Thinking producer processes tasks
  • Assuming producer deletes tasks
2. Which of the following is the correct way to inject a queue named 'email' in a NestJS producer service?
easy
A. @InjectQueue('email') emailQueue: Queue = new Queue();
B. @InjectQueue private emailQueue: Queue('email');
C. @InjectQueue('email') private readonly emailQueue: Queue;
D. @InjectQueue('email') private emailQueue = Queue;

Solution

  1. Step 1: Recall correct syntax for @InjectQueue

    The decorator requires the queue name as a string and the property must be typed as Queue.
  2. Step 2: Check property declaration

    It should be private readonly with type Queue, no manual instantiation needed.
  3. Final Answer:

    @InjectQueue('email') private readonly emailQueue: Queue; -> Option C
  4. Quick Check:

    @InjectQueue('name') private readonly queue: Queue [OK]
Hint: Use @InjectQueue('name') private readonly queue: Queue [OK]
Common Mistakes:
  • Missing private or readonly keywords
  • Trying to instantiate Queue manually
  • Incorrect decorator usage without queue name
3. Given the following code snippet in a NestJS producer service, what will be the output when sendEmail() is called?
async sendEmail() {
  await this.emailQueue.add('send_email', { to: 'user@example.com' });
  return 'Email task added';
}
medium
A. An error because 'send_email' is not a valid job name
B. 'Email task added'
C. The email is sent immediately
D. Nothing happens because add() is asynchronous

Solution

  1. Step 1: Understand queue.add() behavior

    The add() method adds a job to the queue asynchronously but does not send the email immediately.
  2. Step 2: Check return value of sendEmail()

    After adding the job, the function returns the string 'Email task added'.
  3. Final Answer:

    'Email task added' -> Option B
  4. Quick Check:

    queue.add() adds job, function returns confirmation [OK]
Hint: queue.add() adds job; function returns confirmation string [OK]
Common Mistakes:
  • Assuming add() sends email immediately
  • Thinking add() returns error for job name
  • Ignoring async nature of add()
4. Identify the error in this NestJS queue producer code:
@Injectable()
export class NotificationProducer {
  constructor(@InjectQueue('notifications') private notificationsQueue: Queue) {}

  async sendNotification(data: any) {
    this.notificationsQueue.add('notify', data);
  }
}
medium
A. Missing await before this.notificationsQueue.add()
B. Incorrect queue name in @InjectQueue decorator
C. sendNotification should not be async
D. notificationsQueue should be public, not private

Solution

  1. Step 1: Check async method usage

    The add() method returns a promise, so it should be awaited inside an async function to handle completion properly.
  2. Step 2: Verify other parts

    The queue name and access modifiers are correct; async keyword is appropriate.
  3. Final Answer:

    Missing await before this.notificationsQueue.add() -> Option A
  4. Quick Check:

    Async add() needs await to handle promise [OK]
Hint: Always await queue.add() inside async methods [OK]
Common Mistakes:
  • Forgetting await on async queue.add()
  • Changing queue name incorrectly
  • Removing async keyword unnecessarily
5. You want to create a NestJS queue producer that sends different types of jobs to the same queue with different priorities. Which approach correctly implements this?
hard
A. Use queue.add(jobName, data, { priority: number }) to set priority per job
B. Create multiple queues with different names for each priority level
C. Set priority globally on the queue during injection with @InjectQueue
D. Use queue.add(jobName, data) and sort jobs manually later

Solution

  1. Step 1: Understand job priority in queues

    Queue jobs can have individual priorities set when added, using options like { priority: number }.
  2. Step 2: Evaluate options

    Creating multiple queues or setting priority globally is not the recommended way; manual sorting is inefficient.
  3. Final Answer:

    Use queue.add(jobName, data, { priority: number }) to set priority per job -> Option A
  4. Quick Check:

    Set priority per job with add() options [OK]
Hint: Set priority in add() options per job [OK]
Common Mistakes:
  • Trying to set priority globally on queue
  • Creating many queues instead of one
  • Ignoring built-in priority support
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