10

我需要覆盖Delayed::Worker.max_attempts一项特定的工作,我想重试很多次。另外,我不希望以指数方式确定下一个预定时间(来自文档:5 seconds + N ** 4,其中 N 是重试次数)。

我不想覆盖Delayed::Worker设置,并影响其他工作。

我的工作已经是一个自定义工作(我以某种方式处理错误),所以这可能会有所帮助。有关如何执行此操作的任何指示?

4

1 回答 1

17

delayed_job我通过查看源代码弄清楚了。这在他们的文档中没有任何记录。

这是我所做的:

class MyCustomJob < Struct.new(:param1, :param2)
  def perform
    # do something
  end
  
  # attempts and time params are required by delayed_job
  def reschedule_at(time, attempts)
    30.seconds.from_now
  end

  def max_attempts
    50
  end
end

然后在需要的地方使用 运行它enqueue,如下所示:

Delayed::Job.enqueue( MyCustomJob.new( param1, param2 ) )

希望这对将来的某人有所帮助。

于 2013-04-26T01:16:49.537 回答