1

我有一个应该调用第三方 API 的 resque 工作。我希望这种执行方法至少重试 3 次。如果它在第三次尝试时仍然没有通过,我希望它向我发送一封电子邮件,说出现问题并且无法调用 API。

有没有办法使用 resque-retry 来做到这一点

4

3 回答 3

3

您可以使用自定义重试条件来检查 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
于 2012-09-05T02:08:22.703 回答
0

需要在 retry_criteria_check de 之前添加 @retry_exceptions = []

于 2013-11-14T15:11:25.690 回答
0

如果您将ActiveJob 与 Resque 一起使用,则可以使用ActiveJob 的retry_on功能

class RemoteServiceJob < ActiveJob::Base
  retry_on(SomeError) do |job, error|
    # your custom logic
  end
end
于 2018-12-11T10:00:43.600 回答