From 7081ca0704f889fffd4e2c9e3ddb8df8fc466022 Mon Sep 17 00:00:00 2001 From: ari Date: Sun, 29 Jan 2023 12:13:52 +0300 Subject: [PATCH] Adds rescue from database related errors then delay --- lib/rabbit_carrots/tasks/rmq.rake | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/lib/rabbit_carrots/tasks/rmq.rake b/lib/rabbit_carrots/tasks/rmq.rake index 3fc3698..8d7a755 100644 --- a/lib/rabbit_carrots/tasks/rmq.rake +++ b/lib/rabbit_carrots/tasks/rmq.rake @@ -47,9 +47,18 @@ def run_task(queue_name:, handler_class:, routing_keys:) rescue RabbitCarrots::EventHandlers::Errors::NackAndRequeueMessage => _e Rails.logger.info "Nacked and Requeued message: #{payload}" channel.nack(delivery_info.delivery_tag, false, true) + # rescue all database errors + rescue ActiveRecord::Error => e + Rails.logger.error "Error handling message: #{payload}. Error: #{e.message}" + # delay for 3 seconds before requeuing + sleep 3 + channel.nack(delivery_info.delivery_tag, false, true) rescue StandardError => e Rails.logger.error "Error handling message: #{payload}. Error: #{e.message}" + # requeue the message then kill the container channel.nack(delivery_info.delivery_tag, false, true) + # kill the container with sigterm + Process.kill('SIGTERM', Process.pid) end Rails.logger.info 'RUN TASK ENDED'