我有一个应该调用第三方 API 的 resque 工作。我希望这种执行方法至少重试 3 次。如果它在第三次尝试时仍然没有通过,我希望它向我发送一封电子邮件,说出现问题并且无法调用 API。
有没有办法使用 resque-retry 来做到这一点
我有一个应该调用第三方 API 的 resque 工作。我希望这种执行方法至少重试 3 次。如果它在第三次尝试时仍然没有通过,我希望它向我发送一封电子邮件,说出现问题并且无法调用 API。
有没有办法使用 resque-retry 来做到这一点
您可以使用自定义重试条件来检查 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 与 Resque 一起使用,则可以使用ActiveJob 的retry_on
功能。
class RemoteServiceJob < ActiveJob::Base
retry_on(SomeError) do |job, error|
# your custom logic
end
end