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

Ste*_*hen 5 ruby ruby-on-rails exception sidekiq mailchimp-api-v3.0

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

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

我已经尝试了一个rescuesimple ,但它不会阻止 sidekiq 捕获引发的错误。

def preform(id)
  UpdateMailchimpService.new.(id)
rescue
  Mailchimp::ListInvalidBounceMemberError
end
Run Code Online (Sandbox Code Playgroud)

有没有办法做到这一点?谢谢

更新

最后发现我的问题是我们的部署工具坏了(部署失败但没有实现)。实际上,Sidekiq 将忽略任何已获救的错误/异常,并且不会重试并报告给 Bugsnag。

Bugsnag 的文档中,它明确地说:

应该安装和配置 Bugsnag,任何未处理的异常都会被自动检测到,并且应该出现在你的 Bugsnag 仪表板中。

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

Mik*_*ham 6

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

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

  • 嗨,迈克,谢谢你的回答。`def` 块可以视为开始块。/sf/ask/107987071/ (2认同)