From d553042d1c6376dac65d263da822211fe11739c7 Mon Sep 17 00:00:00 2001 From: Ari Karim Date: Sun, 18 Jan 2026 14:30:07 +0300 Subject: [PATCH] fix: Enhance run_task method to handle existing RabbitMQ exchanges by attempting passive read before declaring new ones. --- lib/rabbit_carrots/core.rb | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/lib/rabbit_carrots/core.rb b/lib/rabbit_carrots/core.rb index 1133fbb..a5f665f 100644 --- a/lib/rabbit_carrots/core.rb +++ b/lib/rabbit_carrots/core.rb @@ -79,7 +79,15 @@ module RabbitCarrots def run_task(queue_name:, handler_class:, routing_keys:, queue_arguments: {}, exchange_name: nil, kill_to_restart_on_standard_error: false) RabbitCarrots::Connection.instance.channel.with do |channel| - exchange = channel.topic(exchange_name || RabbitCarrots.configuration.rabbitmq_exchange_name, durable: true) + exchange_name ||= RabbitCarrots.configuration.rabbitmq_exchange_name + + begin + # Try to passively read an existing exchange without declaring it + exchange = channel.topic(exchange_name, passive: true) + rescue Bunny::NotFound + # If the exchange does not exist, declare it + exchange = channel.topic(exchange_name, durable: true) + end logger.info "Listening on QUEUE: #{queue_name} for ROUTING KEYS: #{routing_keys}" queue = channel.queue(queue_name, durable: true, arguments: queue_arguments)