加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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),否则它不会.这不会影响故障记录,因为这会在链中稍后发生.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读