Skip to content

Determine serviceName on @RMQRoute #42

@rnatto-gempe

Description

@rnatto-gempe

Hey, Thanks for this library and to solve my previous issue. 🚀

So, my question is:

how can i have multiples RMQModule at the same project?

I have 2 consumers. that listen 2 distinct queues

BAKERY CONSUMER

import { Module } from '@nestjs/common';
import { ConfigModule, ConfigService } from '@nestjs/config';
import { RMQModule } from 'nestjs-rmq';
import { BakeryConsumerController } from './bakery-consumer.controller';

@Module({
  imports: [
    RMQModule.forRootAsync({
      imports: [ConfigModule],
      inject: [ConfigService],
      useFactory: (configService: ConfigService) => {
        return {
          exchangeName: configService.get('RABBITMQ_EXCHANGE'),
          connections: [
            {
              login: configService.get('RABBITMQ_DEFAULT_USER'),
              password: configService.get('RABBITMQ_DEFAULT_PASS'),
              host: configService.get('RABBITMQ_URL'),
            },
          ],
          serviceName: 'Bakery',
          queueName: 'bakery',
        };
      },
    }),
  ],
  controllers: [BakeryConsumerController],
})
export class BakeryConsumerModule {}

PHARMACY CONSUMER

import { Module } from '@nestjs/common';
import { ConfigModule, ConfigService } from '@nestjs/config';
import { RMQModule } from 'nestjs-rmq';
import { PharmacyConsumerController } from './pharmacy-consumer.controller';

@Module({
  imports: [
    RMQModule.forRootAsync({
      imports: [ConfigModule],
      inject: [ConfigService],
      useFactory: (configService: ConfigService) => {
        return {
          exchangeName: configService.get('RABBITMQ_EXCHANGE'),
          connections: [
            {
              login: configService.get('RABBITMQ_DEFAULT_USER'),
              password: configService.get('RABBITMQ_DEFAULT_PASS'),
              host: configService.get('RABBITMQ_URL'),
            },
          ],
          serviceName: 'Pharmacy',
          queueName: 'pharmacy',
        };
      },
    }),
  ],
  controllers: [PharmacyConsumerController],
})
export class PharmacyConsumerModule {}

And when I declare a consumer inside each service, only the first module config is used. so ONLY the BAKERY queue is being listened.

Here my controllers

import { Controller } from '@nestjs/common';
import { RMQRoute } from 'nestjs-rmq';

@Controller('pharmacy-consumer')
export class PharmacyConsumerController {
  @RMQRoute('#')
  myMethod(message: any): any {
    console.log(message);
    return message;
  }
}
import { Controller } from '@nestjs/common';
import { RMQRoute } from 'nestjs-rmq';

@Controller('bakery-consumer')
export class BakeryConsumerController {
  @RMQRoute('#'})
  myMethod(message: any): any {
    console.log(message);
    return message;
  }
}

My suggestion is to use serviceName inside @RMQRoute like this

@RMQRoute('#', { serviceName: 'Bakery'})

There is another way to make this work on current version?

Metadata

Metadata

Assignees

Labels

enhancementNew feature or request

Projects

No projects

Relationships

None yet

Development

No branches or pull requests

Issue actions