Зачем мне определять имя очереди при создании микросервиса? - PullRequest
0 голосов
/ 10 ноября 2019

Я хочу иметь гибридное приложение 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 при создании микросервиса? Нужно ли создавать разные микросервисы? за каждую очередь?

1 Ответ

1 голос
/ 11 ноября 2019

Я не пользователь NestJS, но кажется логичным, что когда вы используете очереди для отправки сообщений между вашими микросервисами, вам понадобится очередь для каждого микросервиса (а не наоборот).

Очереди используются для асинхронной отправки (TO) и получения (обработки) сообщений между независимыми компонентами.

Имеет ли это смысл?

...