Хотите отправить сообщение всем подписчикам очереди?

У меня два микросервиса. Первый микросервис - это передний сервер, который запрашивает некоторую работу в одном из вторых экземпляров микросервиса. Отличное решение для транспорта NATS - это организация очередей. Я могу отправить сообщение, и NATS отправит его только одному из экземпляров. Но что, если мне нужно отправить сообщение или событие для каждого экземпляра очереди?

Фронт сервис:


//module

  providers: [
    ...,

    {
      provide: 'CLIENT_PROXY_FACTORY',
      useFactory: (configService: ConfigService) => {
        return ClientProxyFactory.create(configService.get('microservice'));
      },
      inject: [ConfigService],
    }
  ],
// service

constructor(
    @Inject('CLIENT_PROXY_FACTORY')
    private nats: ClientProxy,
) {

}
// in some method
method() {

  this.nats.emit('test', 0);
  this.nats.send('test1', true).toPromise();

}

Служба рабочего:

// bootstrap

  transport: Transport.NATS,
  options: {
    url: 'nats://127.0.0.1:4222',
    queue: 'worker'
  }
// controller

  @MessagePattern('test')
  messagefunc() {
    console.log('Got message!');
  }

  @EventPattern('test1')
  eventfunc() {
    console.log('Got event!');
  }

Так. В моем примере мне нужно создать 2 или более экземпляров Worker service. И мне нужно решение, как иногда доставлять события или сообщения всем Worker service экземплярам?


person Roman    schedule 14.09.2020    source источник


Ответы (1)


Сделайте так, чтобы рабочие сервисы подписывались на две темы:

  • Субъект А в очереди. Сообщения, опубликованные для A, будут отправлены только одному воркеру.
  • Тема B без очереди. Сообщения, опубликованные для B, будут отправлены всем работникам.

Извините, не могу сказать, как это реализовать в NestJS.

person Georg    schedule 19.10.2020