【发布时间】:2012-08-26 13:21:20
【问题描述】:
我有一个应该调用第三方 API 的 resque 工作。我希望这种执行方法至少重试 3 次。如果在第三次尝试时仍然无法通过,我希望它向我发送一封电子邮件,说明出现问题并且无法调用 API。
有没有办法使用 resque-retry 来做到这一点
【问题讨论】:
标签: ruby-on-rails ruby ruby-on-rails-3 resque
我有一个应该调用第三方 API 的 resque 工作。我希望这种执行方法至少重试 3 次。如果在第三次尝试时仍然无法通过,我希望它向我发送一封电子邮件,说明出现问题并且无法调用 API。
有没有办法使用 resque-retry 来做到这一点
【问题讨论】:
标签: ruby-on-rails ruby ruby-on-rails-3 resque
您可以使用custom retry criteria 来检查 resque-retry 为您重试了多少次,如果数量太大,请执行不同的操作。像这样的:
class APIWorker
extend Resque::Plugins::Retry
@queue = :api_worker_queue
retry_criteria_check do |exception, *args|
if retry_attempt > 3
send_email
false # don't retry anymore
else
true # continue retrying
end
end
def self.perform(job_id)
do_api_stuff
end
end
【讨论】:
需要在retry_criteria_check de之前添加@retry_exceptions = []
【讨论】:
如果您使用的是ActiveJob with Resque,则可以使用ActiveJob's retry_on feature。
class RemoteServiceJob < ActiveJob::Base
retry_on(SomeError) do |job, error|
# your custom logic
end
end
【讨论】: