NestJS
Jobs (Queues)
Background jobs and message queues using Bull in NestJS.
App Module Configuration: Registering the Bull module in the main application module.
app.module.ts
typescript
import { Module } from '@nestjs/common';
import { BullModule } from '@nestjs/bull';
import { AudioModule } from './audio/audio.module';
@Module({
imports: [
BullModule.forRoot({
redis: {
host: 'localhost',
port: 6379,
},
}),
AudioModule,
],
})
export class AppModule {}
Queue Processor: Creating a consumer to process background jobs.
audio.processor.ts
typescript
import { Processor, Process } from '@nestjs/bull';
import { Job } from 'bull';
@Processor('audio')
export class AudioProcessor {
@Process('transcode')
async handleTranscode(job: Job) {
console.log('Start transcoding...');
console.log(job.data);
// Simulate long-running job
await new Promise((resolve) => setTimeout(resolve, 3000));
console.log('Transcoding completed');
}
}
Adding Jobs: Injecting the queue and adding jobs to it from a service or controller.
audio.service.ts
typescript
import { Injectable } from '@nestjs/common';
import { InjectQueue } from '@nestjs/bull';
import { Queue } from 'bull';
@Injectable()
export class AudioService {
constructor(@InjectQueue('audio') private audioQueue: Queue) {}
async transcode(file: any) {
const job = await this.audioQueue.add('transcode', {
file: 'audio.mp3',
format: 'wav',
});
return { jobId: job.id, status: 'Processing started' };
}
}