From be674c2915f6f149c581bc2fe2783217fe424df8 Mon Sep 17 00:00:00 2001 From: Viktor Seifert Date: Fri, 19 Aug 2022 16:26:38 +0200 Subject: [PATCH] RED-5009: Changed callback to not process redelivered messages to prevent endless retries --- pyinfra/queue/queue_manager.py | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/pyinfra/queue/queue_manager.py b/pyinfra/queue/queue_manager.py index 39383a7..b3bb425 100644 --- a/pyinfra/queue/queue_manager.py +++ b/pyinfra/queue/queue_manager.py @@ -112,8 +112,16 @@ class QueueManager(object): def _create_queue_callback(self, process_message_callback: Callable): def callback(_channel, frame, properties, body): self.logger.info(f"Received message from queue with delivery_tag {frame.delivery_tag}") - self.logger.debug(f"Processing {(frame, properties, body)}.") + # Only try to process each message once. + # Requeueing will be handled by the dead-letter-exchange. + # This prevents endless retries on messages that are impossible to process. + if frame.redelivered: + self.logger.info(f"Aborting message processing for delivery_tag {frame.delivery_tag} " + f"due to it being redelivered") + self._channel.basic_nack(frame.delivery_tag, requeue=False) + + self.logger.debug(f"Processing {(frame, properties, body)}.") try: unpacked_message_body = json.loads(body)