nestjs icon indicating copy to clipboard operation
nestjs copied to clipboard

RabbitMQ: RabbitSubscribe using a handler name without corresponding handler config asserts randomized queues

Open ckfngod opened this issue 1 year ago • 5 comments

Similar to https://github.com/golevelup/nestjs/issues/667

If I use RabbitSubscribe with a handler name but do not provide a corresponding handler config to RabbitMQModule then amq.gen-* queues are asserted. For example:

Given handlers:

@RabbitSubscribe({ name: 'handlerA' })
handlerA() { ... }

@RabbitSubscribe({ name: 'handlerB' })
handlerB() { ... }

@RabbitSubscribe({ name: 'handlerC' })
handlerC() { ... }

With RabbitMQModule config:

{
  handlers: {
    handlerA: [{ ... }],
    handlerB: [],
  },
  ...
}

Then a amq.gen-* queue is asserted because of the missing handlerC property in the config object. The empty array for handlerB does not cause a amq.gen-* queue to be asserted.

ckfngod avatar Apr 12 '24 23:04 ckfngod

@ckfngod What's the expected outcome? Shall we have an explicit property config to prevent such randomness? I'm not sure regarding the follow up item here but i welcome proposals

underfisk avatar Apr 13 '24 20:04 underfisk

@underfisk I expected it to not assert a queue if no config is provided for a handler name regardless of how that happens. It just seems kind of strange that an explicit empty config array behaves differently than a missing property key when they both mean config is missing.

ckfngod avatar Apr 15 '24 19:04 ckfngod

@ckfngod I see what you mean. Well i haven't used in awhile and probably never ran into this issue but i'm open to allow a PR to fix or a feature flag with the proper fix to avoid any outage. If you have the capacity to contribute such change, i would appreciate it a lot 🙏

underfisk avatar Apr 15 '24 20:04 underfisk

@underfisk As I see it there's two issues here:

  1. There is a difference in behaviour between empty config array and other empty config set ups (missing property, empty object in array [{}] etc.). The latter generates randomized queues whereas the former will not.
  2. Not providing a queue name generates randomized queues (amq.gen-* queues)

We can fix the first issue easily so that the behaviour is aligned but I'm wondering if there's actually a valid use case for randomized queues or if we should just prevent those queues from being asserted at all.

ckfngod avatar Sep 24 '24 19:09 ckfngod