如何防止在sidekiq上重试某些异常/错误

时间:2017-06-26 07:06:15

标签: ruby-on-rails ruby exception sidekiq mailchimp-api-v3.0

我有一个sidekiq工作人员会请求第三方api(Mailchimp)并得到一些回应。有时它会响应一条错误消息,api gem会引发错误。

但是,这些错误是正常的,无需重试。所以我希望Sidekiq在发生错误时阻止重试。

我尝试了一个简单的rescue,但它不会阻止sidekiq捕获引发的错误。

def preform(id)
  UpdateMailchimpService.new.(id)
rescue
  Mailchimp::ListInvalidBounceMemberError
end

有什么办法吗?感谢

更新

最后发现我的问题是由我们的部署工具中断(部署失败但未实现)引起的。实际上,Sidekiq将忽略任何获救的错误/异常,并且不会重试它们并向Bugsnag报告。

Bugsnag's documentation中,它清楚地说:

  

应安装和配置Bugsnag,并自动检测任何未处理的异常,并显示在Bugsnag仪表板中。

github上的这个post没有明确的解释,这就是为什么我对这个问题感到困惑的原因。

2 个答案:

答案 0 :(得分:2)

您的假设/示例不正确。做正常的Ruby事情:拯救错误并忽略它。

def perform(id)
  begin
    UpdateMailchimpService.new.(id)
  rescue NormalError
    # job will succeed normally and Sidekiq won't retry it.
  end
end

答案 1 :(得分:1)

使用retry: false advanced option

class UpdateMailchimpWorker
  include Sidekiq::Worker
  sidekiq_options retry: false # ⇐ HERE

  def perform(id)
    UpdateMailchimpService.new.(id)
  end
end