From 08674f24f84faf2e3a29b44f4bc1d32b9a822b96 Mon Sep 17 00:00:00 2001 From: Iliia Khaprov Date: Thu, 2 Jan 2025 11:54:29 +0100 Subject: [PATCH 1/3] Fix #13009, make non-durable subscriptions exclusive by default --- deps/rabbitmq_stomp/src/rabbit_stomp_util.erl | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/deps/rabbitmq_stomp/src/rabbit_stomp_util.erl b/deps/rabbitmq_stomp/src/rabbit_stomp_util.erl index 5c20490091d..88b721be361 100644 --- a/deps/rabbitmq_stomp/src/rabbit_stomp_util.erl +++ b/deps/rabbitmq_stomp/src/rabbit_stomp_util.erl @@ -333,10 +333,11 @@ default_params({exchange, _}) -> [{exclusive, true}, {auto_delete, true}]; default_params({topic, _}) -> - [{exclusive, false}, {auto_delete, true}]; + [{exclusive, true}, {auto_delete, true}]; default_params(_) -> - [{durable, false}]. + [{exclusive, true}, + {durable, false}]. string_to_boolean("True") -> true; From cc228c06bfb7b8b1a40f42307556ef34dc615255 Mon Sep 17 00:00:00 2001 From: Iliia Khaprov Date: Thu, 2 Jan 2025 23:11:34 +0100 Subject: [PATCH 2/3] Fix #13009: Stream queues can not be exclusive --- deps/amqp_client/src/rabbit_routing_util.erl | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/deps/amqp_client/src/rabbit_routing_util.erl b/deps/amqp_client/src/rabbit_routing_util.erl index 6e7ddcb0b72..6ff51dbfaa3 100644 --- a/deps/amqp_client/src/rabbit_routing_util.erl +++ b/deps/amqp_client/src/rabbit_routing_util.erl @@ -137,17 +137,28 @@ queue_declare_method(#'queue.declare'{} = Method, Type, Params) -> false -> Method#'queue.declare'{auto_delete = true, exclusive = true} end, + %% set the rest of queue.declare fields from Params Method2 = lists:foldl(fun (F, Acc) -> F(Acc, Params) end, Method1, [fun update_queue_declare_arguments/2, fun update_queue_declare_exclusive/2, fun update_queue_declare_auto_delete/2, fun update_queue_declare_nowait/2]), + + Arguments = proplists:get_value(arguments, Params, []), + QueueType = rabbit_amqqueue:get_queue_type(Arguments), + + Method3 = case QueueType of + rabbit_stream_queue -> Method2#'queue.declare'{durable = true, + exclusive = false}; + _ -> Method2 + end, + case {Type, proplists:get_value(subscription_queue_name_gen, Params)} of {topic, SQNG} when is_function(SQNG) -> - Method2#'queue.declare'{queue = SQNG()}; + Method3#'queue.declare'{queue = SQNG()}; {exchange, SQNG} when is_function(SQNG) -> - Method2#'queue.declare'{queue = SQNG()}; + Method3#'queue.declare'{queue = SQNG()}; _ -> - Method2 + Method3 end. From 26e0e9cc8932a592f5b60a8bf704d3a32b650d78 Mon Sep 17 00:00:00 2001 From: Iliia Khaprov Date: Sat, 4 Jan 2025 23:35:50 +0100 Subject: [PATCH 3/3] looks like topic subs want not to be exclusive --- deps/rabbitmq_stomp/src/rabbit_stomp_util.erl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/deps/rabbitmq_stomp/src/rabbit_stomp_util.erl b/deps/rabbitmq_stomp/src/rabbit_stomp_util.erl index 88b721be361..df989597cd0 100644 --- a/deps/rabbitmq_stomp/src/rabbit_stomp_util.erl +++ b/deps/rabbitmq_stomp/src/rabbit_stomp_util.erl @@ -333,7 +333,7 @@ default_params({exchange, _}) -> [{exclusive, true}, {auto_delete, true}]; default_params({topic, _}) -> - [{exclusive, true}, {auto_delete, true}]; + [{exclusive, false}, {auto_delete, true}]; default_params(_) -> [{exclusive, true},