@nsix/nestjs-rmq-queue
v0.1.4
Published
NestJS-style BullMQ-like queue abstraction over RabbitMQ (amqplib).
Readme
nest-rmq-queue
Простий NestJS-пакет, який дає Bull/BullMQ-подібний API поверх RabbitMQ (amqplib):
RmqQueue– аналогQueue@RmqProcessor()+@RmqProcess()– аналог@Processor()/@Process()із@nestjs/bull- Повний набір подій черги через декоратори:
@OnQueueCompleted()/@OnGlobalQueueCompleted()@OnQueueFailed()/@OnGlobalQueueFailed()- та інші (
error,waiting,active,stalled,progress,paused,resumed,cleaned,drained,removed)
Встановлення
npm i nest-rmq-queue amqplib
npm install ../libs/nest-rmq-queueПриклад використання
// app.module.ts
import { Module } from '@nestjs/common';
import { RmqQueueModule } from 'nest-rmq-queue';
import { EmailModule } from './email/email.module';
@Module({
imports: [
RmqQueueModule.forRoot({
connection: {
host: 'localhost',
port: 5672,
username: 'guest',
password: 'guest',
vhost: '/',
},
queues: [{ name: 'email-queue' }],
prefetch: 5,
}),
EmailModule,
],
})
export class AppModule {}// email-producer.service.ts
import { Injectable } from '@nestjs/common';
import { InjectRmqQueue, RmqQueue } from 'nest-rmq-queue';
@Injectable()
export class EmailProducerService {
constructor(
@InjectRmqQueue('email-queue')
private readonly emailQueue: RmqQueue<{ to: string; subject: string }>,
) {}
async sendWelcomeEmail(to: string) {
await this.emailQueue.add('welcome', {
to,
subject: 'Welcome!',
});
}
}// email.processor.ts
import { Injectable } from '@nestjs/common';
import {
RmqProcessor,
RmqProcess,
OnQueueActive,
OnQueueCompleted,
OnQueueFailed,
RmqJob,
} from 'nest-rmq-queue';
@Injectable()
@RmqProcessor('email-queue')
export class EmailProcessor {
@RmqProcess('welcome')
async handleWelcome(job: RmqJob<{ to: string; subject: string }>) {
// ... відправка листа
return { ok: true };
}
@OnQueueActive()
onActive(job: RmqJob<any>) {
console.log('email-queue ACTIVE', job.id, job.name);
}
@OnQueueCompleted()
onCompleted(job: RmqJob<any>, result: any) {
console.log('email-queue COMPLETED', job.id, result);
}
@OnQueueFailed()
onFailed(job: RmqJob<any>, err: Error) {
console.error('email-queue FAILED', job.id, err.message);
}
}