ruby-on-rails – Sidekiq / Airbrake仅在重试熄灭时发布异常
发布时间:2020-12-17 02:46:19 所属栏目:百科 来源:网络整理
导读:我希望Airbrake仅在重试耗尽时收到错误通知,但我似乎无法想到实现它的方法…… 我可以添加一个sidekiq_retries_exhausted挂钩来将错误发送到AirBrake,但我能想到捕获实际失败的唯一方法是添加一个吞噬错误的中间件,但是如果没有错误,作业将被标记为成功……
我希望Airbrake仅在重试耗尽时收到错误通知,但我似乎无法想到实现它的方法……
我可以添加一个sidekiq_retries_exhausted挂钩来将错误发送到AirBrake,但我能想到捕获实际失败的唯一方法是添加一个吞噬错误的中间件,但是如果没有错误,作业将被标记为成功……那么永远不会有任何重试…… 希望有道理! 解决方法
我设法使用插入列表开头的Sidekiq中间件来实现它:
class RaiSEOnRetriesExtinguishedMiddleware include Sidekiq::Util def call(worker,msg,queue) yield rescue Exception => e bubble_exception(msg,e) end private def bubble_exception(msg,e) max_retries = msg['retries'] || Sidekiq::Middleware::Server::RetryJobs::DEFAULT_MAX_RETRY_ATTEMPTS retry_count = msg['retry_count'] || 0 last_try = !msg['retry'] || retry_count == max_retries - 1 raise e if last_try end def retry_middleware @retry_middleware ||= Sidekiq::Middleware::Server::RetryJobs.new end end 如果它是最后一次尝试并抛出异常,它会让它冒泡(到Airbrake),否则它不会.这不会影响故障记录,因为这会在链中稍后发生. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |