nestjs
nestjs copied to clipboard
Multiple RabbitSubscribe Decorators in the Same Provider rotates through decorated methods rather than invoking the correct method
The following is an issue I ran into only after much debugging in the @golevelup/nestjs-rabbitmq
package.
Reproduction
Register Provider with multiple RabbitSubscribe
decorators that share a queue but subscribe to different topics on an exchange (i.e appointment.schedule.created
and appointment.schededule.updated
).
import { RabbitSubscribe } from '@golevelup/nestjs-rabbitmq';
import { Injectable } from '@nestjs/common';
@Injectable()
export class AppointmentSchedulingService {
@RabbitSubscribe({
exchange: 'exchange1',
routingKey: 'appointment.schedule.created',
queue: 'subscribe-queue',
})
public async createdHandler(msg: {}) {
console.log(`Created appointment `, msg);
}
@RabbitSubscribe({
exchange: 'exchange1',
routingKey: 'appointment.schedule.updated',
queue: 'subscribe-queue',
})
public async updatedHandler(msg: {}) {
console.log(`Updated appointment `, msg);
}
}
publish multiple appointment.schedule.created
events quickly to the exchange exchange1
.
expected behavior
the createdHandler
will be invoked twice.
actual behavior
the createdHandler
is invoked one time and the updatedHandler
is invoked one time.
I would expect that I could register multiple handlers in a provider that get invoked with different routing keys. I would not expect a handler with a different routing key to get invoked.
Any help better understanding the source of this issue would be appreciated and Id be happy to help contribute a solution if one is necessary
why is this closed? im experiencing this right now, this is not fixed in 3.7.0 or 4.0.0
I agree that this is something that should be addressed but the simple fix right now is to avoid using the same queue name for multiple hanlders. It messes up the bindings and causes your NestJS callback to get registered
this problem still occurs in version 5.1.0
This problem still occurs in 5.2.0. Managing queues this way is an important feature for any event driven system; this should be one of your top priorities.