如何防止在 sidekiq 上重试某些 Exception/Error

How to prevent retrying for some Exception/Error on sidekiq

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

但是,这些错误都是正常的,不需要重试。所以我希望 Sidekiq 在出现这些错误时阻止重试。

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

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

有什么办法吗?谢谢

更新

终于发现我的问题是因为我们的部署工具坏了(部署失败但没有实现)。实际上,Sidekiq 会忽略任何获救的 error/exception 并且不会重试并报告给 Bugsnag。

Bugsnag's documentation中明确表示:

Bugsnag should be installed and configured, and any unhandled exceptions will be automatically detected and should appear in your Bugsnag dashboard.

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

使用retry: false advanced option:

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

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

您的assumption/example不正确。做正常的 Ruby 事情:拯救错误并忽略它。

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