From 056b4a5431a2501145d307ff76f9132b5135816e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gabriel=20Ostroluck=C3=BD?= Date: Sat, 10 Feb 2024 10:50:40 +0100 Subject: [PATCH] [Messenger] AMQP:Automatically reconnect on connection loss --- .../Messenger/Bridge/Amqp/Transport/AmqpReceiver.php | 10 ++++++++++ 1 file changed, 10 insertions(+) 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); }