我有一个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没有明确的解释,这就是为什么我对这个问题感到困惑的原因。
答案 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