Queue
Carno.js integrates BullMQ for robust background job processing.
Installation
bun install @carno.js/queue
Setup
Register the module in your application.
import { Carno } from '@carno.js/core';
import { CarnoQueue } from '@carno.js/queue';
const app = new Carno()
.use(CarnoQueue({
connection: {
host: 'localhost',
port: 6379
}
}));
await app.listen(3000);
Creating a Queue
Use the @Queue() decorator to define a processor for a named queue.
import { Queue, Process } from '@carno.js/queue';
import { Job } from 'bullmq';
@Queue('email')
export class EmailConsumer {
@Process('send-welcome')
async sendWelcomeEmail(job: Job) {
console.log(`Sending email to ${job.data.email}`);
// logic...
}
}
Adding Jobs
Inject the queue into your services using @InjectQueue().
import { Service } from '@carno.js/core';
import { InjectQueue, BullQueue } from '@carno.js/queue';
@Service()
export class AuthService {
constructor(
@InjectQueue('email') private emailQueue: BullQueue
) {}
async register(user: User) {
// ... create user
await this.emailQueue.add('send-welcome', {
email: user.email
});
}
}
Events
You can listen to queue events (like completed, failed) using decorators.
import { Queue, OnQueueCompleted } from '@carno.js/queue';
@Queue('email')
export class EmailConsumer {
@OnQueueCompleted()
onCompleted(job: Job) {
console.log(`Job ${job.id} completed!`);
}
}