Я хочу иметь гибридное приложение NestJS, HTTP + RabbitMQ. Но не поймите, если я должен создать разные микросервисы для каждой очереди.
Я следовал руководству NestJS RabbitMQ (https://docs.nestjs.com/microservices/rabbitmq) и примеру GitHub (https://github.com/nestjs/nest/tree/master/sample/03-microservices).
* 1008)* 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 при создании микросервиса? Нужно ли создавать разные микросервисы? за каждую очередь?