From 82ddbfb40f4a9afabce3d01553b2c6d3c535a9ab Mon Sep 17 00:00:00 2001 From: Bruno Da Silva Date: Wed, 30 May 2018 14:13:32 -0400 Subject: [PATCH] Add retries to outbox on confirm failure --- lib/multiple_man/producers/general.rb | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/lib/multiple_man/producers/general.rb b/lib/multiple_man/producers/general.rb index 6be7c61..adaaf68 100644 --- a/lib/multiple_man/producers/general.rb +++ b/lib/multiple_man/producers/general.rb @@ -89,9 +89,20 @@ def send_messages!(grouped_messages, connection) def confirm_published!(messages, connection) ActiveSupport::Notifications.instrument('multiple_man.producer.confirm_published') do channel = connection.channel - raise ProducerError.new(channel.nacked_set.to_a) unless channel.wait_for_confirms - - MultipleMan.logger.debug("published #{messages.size} messages") + begin + retries ||= 3 + raise ProducerError.new(channel.nacked_set.to_a) unless channel.wait_for_confirms + rescue ProducerError + if (retries -= 1).zero? + MultipleMan.logger.debug("Tried to publish #{messages.size}, but failed to publish #{channel.nacked_set.size} messages!") + break + end + grouped_messages = group_by_set(messages) + send_messages!(grouped_messages, connection) + retry + else + MultipleMan.logger.debug("published #{messages.size} messages") + end end end