Как описать конфиг RabbitMQ с НЕСКОЛЬКИМИ очередями?

Только начал изучать RabbitMQ и не могу понять, как взаимодействовать сразу с НЕСКОЛЬКИМИ очередями. Пока я сделал только ОДНУ очередь. И через эту очередь проходят сообщения о регистрации пользователя. Затем эти сообщения забираются сервисом уведомлений и на почту зарегистрированного пользователя отправляется письмо, о том что он подписался на рассылку уведомлений. При этом нигде в коде явно не указывается из какой очереди выбирать сообщения, т.к. очередь на данный момент всего ОДНА.

Я хочу добавить ВТОРУЮ очередь через переменную окружения и в конфиге Rabbit-а уже указать, что у меня ДВЕ очереди. Через вторую очередь я планирую отправлять уведомления о новых заданиях.

RABBIT_USER=admin
RABBIT_PASSWORD=test
RABBIT_HOST=localhost:5672
RABBIT_NOTIFY_SERVICE_QUEUE=taskforce.subscribers
RABBIT_TASKS_SERVICE_QUEUE=taskforce.newtasks - ВТОРАЯ ОЧЕРЕДЬ.

Что-то типа такого хочу сделать:

import { ConfigService, registerAs }  from '@nestjs/config';
import { RmqOptions, Transport } from '@nestjs/microservices';

export const rabbitMqOptions = registerAs('rmq', () => ({
  user: process.env.RABBIT_USER,
  password: process.env.RABBIT_PASSWORD,
  host: process.env.RABBIT_HOST,
  queue_1: process.env.RABBIT_NOTIFY_SERVICE_QUEUE,
  queue_2: process.env.RABBIT_TASKS_SERVICE_QUEUE,
}));

export function getRabbitMqConfig(configService: ConfigService): RmqOptions {
  const user = configService.get<string>('rmq.user');
  const password = configService.get<string>('rmq.password');
  const host = configService.get<string>('rmq.host');
  const queue_1 = configService.get<string>('rmq.queue_1');
  const queue_2 = configService.get<string>('rmq.queue_2');
  const url = `amqp://${user}:${password}@${host}`;

  return {
    transport: Transport.RMQ,
    options: {
      urls: [url],
      queue: [queue_1, queue_2],
      persistent: true,
      noAck: true,
      queueOptions: {
        durable: true,
      }
    }
  }
}

Но так не получается, т.к. в типе RmqOptions явно прописано, что параметр queue принимает строку в которой ОДНА очередь и всё. А мне нужно как-то передать массив с несколькими очередями. Что-то типа такого queue: [queue_1, queue_2],. Как решается такая проблема?


Ответы (0 шт):