【问题标题】:Resque retry to perform a 'finally' function after several retries重试几次后重新尝试执行“最终”功能
【发布时间】:2012-08-26 13:21:20
【问题描述】:

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

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

【问题讨论】:

    标签: ruby-on-rails ruby ruby-on-rails-3 resque


    【解决方案1】:

    您可以使用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
    

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        【解决方案3】:

        如果您使用的是ActiveJob with Resque,则可以使用ActiveJob's retry_on feature

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

        【讨论】:

          猜你喜欢
          • 2013-08-10
          • 2012-08-18
          • 2017-09-22
          • 2021-11-05
          • 2015-01-17
          • 2022-01-12
          • 2019-07-29
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多