ruby 如何防止因sidekiq上的某些异常/错误而重试

w9apscun  于 2022-11-04  发布在  Ruby
关注(0)|答案(2)|浏览(143)

我有一个sidekiq工作者,它会请求第三方API(Mailchimp)并得到一些响应。有时它会响应一个错误消息,而API gem会引发一个错误。
但是,这些错误是正常的,不需要重试。所以我希望Sidekiq在出现这些错误时阻止重试。
我已经尝试了一个简单的rescue,但它不会阻止sidekiq捕获的错误引发.

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

有什么办法吗?谢谢

更新

最后发现我的问题是由于我们的部署工具坏了(部署失败,但没有实现)。实际上,Sidekiq将忽略任何挽救的错误/异常,他们不会重试,并报告给Bugsnag。
在Bugsnag的文档中,它清楚地写道:
应该安装并配置Bugsnag,任何未处理的异常都将被自动检测到,并应显示在Bugsnag Jmeter 板中。
这个github上的post没有一个明确的解释,所以这就是为什么我对这个问题感到困惑。

9jyewag0

9jyewag01#

你的假设/例子是错误的。做正常的Ruby操作:修复错误并忽略它。

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

biswetbf2#

使用retry: falseadvanced option

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

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

相关问题