NestJS 通讯模块
这是一个 npm 软件包,用于管理 NestJS 应用程序中的邮件 。 它提供了一个在您的 NestJS 应用程序中配置消息选项和发送不同服务消息的方法.
安装
您可以使用 npm 或纱线安装此软件包 :
npm install @aiondigital/messaging-queues
# or
yarn add @aiondigital/messaging-queues
使用/实例
要在全球配置模块, 您可以使用 MessagingModule.forRootAsync 方法。 这样您就可以为您的应用程序设置消息选项 .
import { MessagingModule } from '@aiondigital/messaging-queues';
import { ConfigurationService } from './configuration.service';
@Module({
imports: [CommonModule],
imports: [
MessagingModule.forRootAsync({
useFactory: (_config: ConfigurationService) => {
return _config.MESSAGING_OPTIONS;
},
inject: [ConfigurationService],
}),
],
})
export class YourModule {}
这个 MESSAGING_OPTIONS 对象应当有以下字段:
- 过期秒( 可选): 指定信件到期时间的编号 .
- 死信交换:死信交换的名称.
- 死字队列:死字队列的名称.
- 经纪人Type:代表经纪人类型的值(如"redis"或"rabbitmq").
- rabbitmq(可选):如果经纪Type被设定为"rabbitmq",则为RabbitMQ的额外配置.
- redis (可选): Redis 的额外配置,如果经纪Type被设定为"redis".
发送信件
您可以使用 Message Service 发送来自您 NestJS 应用程序中不同服务的信息 。 首先,您需要注册队列 :
import { MessagingModule } from '@aiondigital/messaging-queues';
@Module({
imports: [MessagingModule.registerQueue({
name: ROUTING_KEYS.ADD_AUDIT_LOG,
exchangeName: EXCHANGE.AUDIT,
})],
})
export class YourModule {}
然后,在你的服务, 你可以使用 MessagingService 发送信件 :
import { Injectable } from '@nestjs/common';
import { MessagingService } from '@aiondigital/messaging-queues';
@Injectable()
export class YourService {
constructor(private readonly messagingService: MessagingService) {}
sendLogs(input) {
this.messagingService.sendMessage(ROUTING_KEYS.ADD_AUDIT_LOG, input);
}
}
就这样! 您已经为邮件模块设置了全局配置, 可以使用 MessagingService 从您的 NestJS 服务发送消息.
信件处理
级级装饰
在类层面上,您可以使用@Processor 装饰器来指定该类将负责处理的路由密钥. 这是你如何使用它:
import { Processor } from '@aiondigital/messaging-queues';
@Processor(ROUTING_KEYS.ADD_AUDIT_LOG)
export class YourMessageProcessor {
// Your message processing methods go here
}
函数级装饰器
对于单个信件处理方法,您可以使用 @Process 指定信件处理细节的装饰. 这是你如何使用它:
import { Process } from '@aiondigital/messaging-queues';
import { CreateAuditLogInput } from './create-audit-log.dto';
@Process({
name: '', // Give it a unique name
exchangeName: EXCHANGE.AUDIT,
routingKey: ROUTING_KEYS.ADD_AUDIT_LOG,
})
async auditlog(data: CreateAuditLogInput, done: AckCallback) {
// Your message processing logic here
try {
const audit = await this.auditService.create(data, ['id']);
return audit;
} catch (error) {
this.#logger.error(`Failed to add audit log: [${JSON.stringify(data)}]`);
this.#logger.error(error);
done(error);
}
}
你应该把 @Process 使用特定路由键处理消息的方法的装饰器。 在同一类中,可以有多种使用不同路由键的方法.
记住替换占位符(ROUTING_KEYS.ADD_AUDIT_LOG, (中文(简体) ), EXCHANGE.AUDIT以申请中的实际数值表示.
现在 YourMessageProcessor 类将处理信件,其中包含在 @Processor 装饰者,以及 auditlog 方法将使用您指定的路由键处理信件 @Process 装饰师.
许可证
此软件包将在 MIT 许可证