重试以在多次重试后执行'finally'功能



我有一个resque作业,应该调用第三方API。我希望此执行方法至少重试3次。如果它在第三次尝试时仍然没有通过,我希望它给我发一封电子邮件,告诉我出了问题,无法调用API。

有没有一种方法可以使用resque重试

您可以使用自定义重试标准来检查resque重试为您重试的次数,如果次数太大,则执行不同的操作。类似这样的东西:

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=[]

如果使用带有Resque的ActiveJob,则可以使用ActiveJob的retry_on功能。

class RemoteServiceJob < ActiveJob::Base
  retry_on(SomeError) do |job, error|
    # your custom logic
  end
end

最新更新