0
0
NestJSframework~10 mins

Queue consumers (processors) in NestJS - Step-by-Step Execution

Choose your learning style9 modes available
Concept Flow - Queue consumers (processors)
Job added to Queue
Queue stores job
Consumer listens to Queue
Consumer receives job
Process job logic
Job completed or failed
Consumer waits for next job
Jobs are added to a queue, consumers listen and pick jobs one by one, process them, then wait for more.
Execution Sample
NestJS
import { Processor, Process } from '@nestjs/bull';
import { Job } from 'bull';

@Processor('email')
export class EmailProcessor {
  @Process('send')
  async handleSendEmail(job: Job) {
    console.log(`Sending email to ${job.data.email}`);
  }
}
This code defines a consumer that listens to the 'email' queue and processes 'send' jobs by logging the email address.
Execution Table
StepEventQueue StateConsumer ActionOutput
1Job added to 'email' queue with data {email: 'a@example.com'}Queue: [{send, {email: 'a@example.com'}}]Consumer idle, waitingNo output
2Consumer detects job in queueQueue: [{send, {email: 'a@example.com'}}]Consumer picks jobNo output
3Consumer processes jobQueue: []Runs handleSendEmail with job dataLogs: Sending email to a@example.com
4Job completedQueue: []Consumer waits for next jobNo output
5Job added to 'email' queue with data {email: 'b@example.com'}Queue: [{send, {email: 'b@example.com'}}]Consumer idle, waitingNo output
6Consumer detects job in queueQueue: [{send, {email: 'b@example.com'}}]Consumer picks jobNo output
7Consumer processes jobQueue: []Runs handleSendEmail with job dataLogs: Sending email to b@example.com
8Job completedQueue: []Consumer waits for next jobNo output
9No more jobsQueue: []Consumer idleNo output
💡 No more jobs in queue, consumer waits idle
Variable Tracker
VariableStartAfter Step 1After Step 3After Step 5After Step 7Final
Queue[][{send, {email: 'a@example.com'}}][][{send, {email: 'b@example.com'}}][][]
Consumer StateIdleIdleProcessing jobIdleProcessing jobIdle
Current Job Datanull{email: 'a@example.com'}null{email: 'b@example.com'}nullnull
Key Moments - 3 Insights
Why does the consumer wait idle after processing a job?
Because the consumer listens continuously but only acts when a job is in the queue, as shown in steps 4 and 9 where the queue is empty and consumer state is idle.
How does the consumer know which job to process next?
The consumer picks the next job from the queue in order, as seen in steps 2 and 6 where it detects and picks the first job in the queue.
What happens if multiple jobs are added quickly?
Jobs queue up and the consumer processes them one by one in order, as the queue state shows jobs added and removed sequentially in the execution table.
Visual Quiz - 3 Questions
Test your understanding
Look at the execution table, what is the consumer state after step 3?
AProcessing job
BIdle
CWaiting for job
DDisconnected
💡 Hint
Check the 'Consumer State' variable after step 3 in variable_tracker.
At which step does the queue become empty after processing a job?
AStep 2
BStep 3
CStep 5
DStep 7
💡 Hint
Look at the 'Queue' variable state in variable_tracker after each step.
If a new job is added at step 9, what will the consumer do next?
AIgnore the job
BCrash due to no handler
CProcess the job immediately
DWait until manually restarted
💡 Hint
Refer to the flow where consumer detects and processes jobs as soon as they appear in the queue.
Concept Snapshot
Queue consumers listen to a queue for jobs.
When a job arrives, the consumer picks it up.
It runs the processing function with job data.
After processing, it waits for the next job.
Jobs are processed one at a time in order.
This keeps work organized and scalable.
Full Transcript
In NestJS, queue consumers called processors listen to queues for jobs. When a job is added, the consumer detects it and picks it from the queue. It runs the processing function with the job's data, for example sending an email. After finishing, the consumer waits idle until the next job arrives. This process repeats continuously. The queue holds jobs in order, and the consumer processes them one by one. This helps handle background tasks efficiently and reliably.