Fix/connection on queue work#337
Open
LucasOtaviani wants to merge 10 commits into
Open
Conversation
Updating master with base
…ds AMQPConnectionClosedException
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Hello, @jleonardolemos! I’ve opened this pull request to address an issue that occurs when using Pigeon with a queue worker.
The Problem
When running Pigeon consumers under Supervisor as long-lived processes, the AMQP connection can be closed unexpectedly. When this happens, the Consumer throws an unhandled AMQPConnectionClosedException and the process dies.
The root cause is that Consumer stores a channel reference at onstruction time and never refreshes it. Although
RabbitDriver::getConnection()already has reconnection logic, the Consumer never calls it again after initialization, so it keeps using a stale channel.Proposed Solution
AMQPConnectionClosedExceptionand triggers a reconnection flow instead of crashing.Consumer::reconnect()retries getting a fresh channel from the driver with linear backoff. After exhausting all attempts, it throws a RuntimeException.pigeon.consumer.reconnect_attempts: max reconnection attempts (default: 3)pigeon.consumer.enable_consumer_logs: toggle consumer log output (default: true)What are your thoughts?
Additional bug fix
When calling the
basic_consumemethod, the consumer tag setting was being read fromamqpconfig file, which doesn't exist anymore, so it was changed to read from thepigeonconfig file. It ensures the correct tag is passed to the basic_consume.