我想要一个混合的NestJS应用程序,HTTP + RabbitMQ。但是不知道是否应该为每个队列创建不同的微服务。
我遵循了NestJS的RabbitMQ指南(https://docs.nestjs.com/microservices/rabbitmq)和GitHub示例(https://github.com/nestjs/nest/tree/master/sample/03-microservices)。
main.ts
app.connectMicroservice({
transport: Transport.RMQ,
options: {
urls: [`amqp://user:user@hostname:5672`],
queue: "cats_queue",
queueOptions: { durable: false },
prefetchCount: 1,
}
});
...
await app.startAllMicroservicesAsync();
app.module.ts (模块导入)
ClientsModule.register([{
name: "CATS_QUEUE", transport: Transport.RMQ, options: {
urls: [`amqp://user:user@hostname:5672`],
queue: "cats_queue",
queueOptions: { durable: false },
prefetchCount: 1
}
}])
app.controller.ts
constructor(
@Inject("CATS_QUEUE") private readonly client: ClientProxy
) {
}
@Get("mq")
mq(): Observable<number> {
const pattern = { cmd: "sum" };
const data = [1, 2, 3, 4, 5];
return this.client.send<number>(pattern, data);
}
@MessagePattern({ cmd: "sum" })
sum(data: number[]): number {
console.log("MESSAGE RECEIVED : " + data.toString());
return (data || []).reduce((a, b) => a + b);
}
据我了解,我需要为ClientsModule.register()
中的每个队列定义app.module.ts
。但是,为什么在创建微服务时还需要定义RabbitMQ队列名称?我需要为每个队列创建不同的微服务吗?
答案 0 :(得分:1)
我不是NestJS用户,但是当您使用队列在微服务之间发送消息时,每个逻辑服务都需要一个队列(而不是相反),这似乎合乎逻辑。
队列用于在独立组件之间异步发送(TO)和接收(Process)消息。
这有意义吗?