diff --git a/src/Symfony/Component/Messenger/Bridge/Amqp/Transport/AmqpReceiver.php b/src/Symfony/Component/Messenger/Bridge/Amqp/Transport/AmqpReceiver.php index 631f79da9dcb9..44a2ab6b87513 100644 --- a/src/Symfony/Component/Messenger/Bridge/Amqp/Transport/AmqpReceiver.php +++ b/src/Symfony/Component/Messenger/Bridge/Amqp/Transport/AmqpReceiver.php @@ -52,6 +52,16 @@ private function getEnvelope(string $queueName): iterable { try { $amqpEnvelope = $this->connection->get($queueName); + } catch (\AMQPConnectionException) { + // Try to reconnect once to accommodate need for one of the nodes in cluster needing to stop serving the + // traffic. This may happen for example when one of the nodes in cluster is going into maintenance node. + // see https://github.com/php-amqplib/php-amqplib/issues/1161 + try { + $this->connection->queue($queueName)->getConnection()->reconnect(); + $amqpEnvelope = $this->connection->get($queueName); + } catch (\AMQPException $exception) { + throw new TransportException($exception->getMessage(), 0, $exception); + } } catch (\AMQPException $exception) { throw new TransportException($exception->getMessage(), 0, $exception); }