Skip to content

Fix #13009, STOMP: default to exclusive queues except stream queues (backport #13016)#15809

Merged
michaelklishin merged 6 commits intov4.3.xfrom
mergify/bp/v4.3.x/pr-13016
Mar 23, 2026
Merged

Fix #13009, STOMP: default to exclusive queues except stream queues (backport #13016)#15809
michaelklishin merged 6 commits intov4.3.xfrom
mergify/bp/v4.3.x/pr-13016

Conversation

@mergify
Copy link
Copy Markdown

@mergify mergify Bot commented Mar 23, 2026

This is a backport of #13016 (finished and merged recently, even if the PR is originally from late 2024).

Proposed Changes

STOMP: default to exclusive queues except for quorum queues and streams.

Now that non-durable, non-exclusive queues are disabled by default, this
updates the STOMP plugin to use:

  • /queue/<name>: declares a durable, non-exclusive, non-auto-delete queue
  • /topic/<name> (default): declares a transient, exclusive, auto-delete queue bound to the topic exchange
  • /topic/<name> with durable:true and auto-delete:false: declares a durable, non-exclusive, non-auto-delete queue, allowing shared and resumable subscriptions
  • /exchange/<name>/<routing-key>: declares a transient, exclusive, auto-delete queue bound to the name exchange
  • /temp-queue/<name>: declares a transient, exclusive, auto-delete queue
  • /amq/queue/<name> and /reply-queue/<name>: nothing changes, these reference a pre-existing queue

This is a Breaking Change

For some STOMP destination types and clients that rely on all defaults, this is, at least technically, a breaking change.

However, so is the status quo: as of 4.3.0, non-durable, non-exclusive queues cannot be declared without opting out (a server reconfiguration), and that's exactly what the current STOMP plugin uses.

deadtrickster and others added 6 commits March 23, 2026 19:39
The STOMP plugin still relies on `amqp_client` (for now),
which cannot use `rabbit_vhost`, so we extract a new
DQT resolution function that takes the virtual host
DQT as an argument.

The STOMP plugin then resolves the DQT using
`rabbit_vhost` and `rabbit_registry`, passes
it to `get_queue_type/2` and decides on the
properties based on the canonicalized type name
(a module name).

(cherry picked from commit d8702f3)
via `rabbit_vhost:default_queue_type/1`.

(cherry picked from commit a27c5ae)
This avoids making `amqp_client` aware of the DQT
code paths in the server, plus its Dialyzer run
now passes.

(cherry picked from commit b2d5376)
@mergify mergify Bot assigned ikavgo Mar 23, 2026
@michaelklishin michaelklishin added this to the 4.3.0 milestone Mar 23, 2026
@michaelklishin michaelklishin merged commit 37553ab into v4.3.x Mar 23, 2026
184 checks passed
@michaelklishin michaelklishin deleted the mergify/bp/v4.3.x/pr-13016 branch March 23, 2026 19:52
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants