Rails:ActiveJob:延迟重试相同的作业

Rails : ActiveJob : Retry same job with some delay

我正在使用主动作业,效果非常好。当我在玩的时候,我注意到了一些东西,我正在寻找任何改进。

我有这样的工作:

class SomeJob < ApplicationJob
  queue_as :default

  def perform(param)

    # if condition then re-try after x minutes
    if condition
       self.class.set(:wait => x.minutes).perform_later(param)
       return
    end

    # something else
  end
end

在某些情况下,我正在尝试在 x 分钟 delay 后使用相同的 original parameters 重新安排当前作业。 scheduling 效果很好。但是,我在数据库级别观察到一些细微差别并希望进行改进。

问题是在 db table 中创建了一个 new job,一个新的 row。相反,我想让它像 same job 一样工作,只是添加了一些 delay (基本上我想将参数修改为 re-schedulecurrent job 相同显然是参数).

我确实意识到 raising an error 可能会成功,就从事相同的工作而言。一件好事是 attempts 也增加了。但是,我希望能够在作业再次运行之前添加一个 delay(相同的作业,而不创建新作业)。

我该怎么做?谢谢。

是的,您会想要重试而不是将新作业加入队列。使用class方法查看自定义on_retry

更改您的代码,它可能看起来像:

class SomeJob < ApplicationJob
  queue_as :default

  retry_on RetrySomeJobException, wait: x.minutes

  def perform(param)

    raise RetrySomeJobException if condition

    # Do the work!
  end
end