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



我正在使用活动作业,它运行得非常好。当我四处玩耍时,我注意到了一些东西,我正在寻找任何改进。

我有一份类似的工作:

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分钟后用相同的original parameters重新安排当前作业delayscheduling运行良好。但是,我在数据库级别观察到了一些细微差别,并希望有所改进。

问题是创建了一个new job,即db表中的一个新row。相反,我想让它作为same job工作,只添加一些delay(基本上我想把参数修改为re-schedule,显然是用相同的参数修改相同的current job(。

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

我该怎么做?谢谢

是的,您希望重试而不是将新作业排入队列。使用类方法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

最新更新