我正在使用积极的工作,并且效果很好。当我在玩耍时,我注意到了一些东西,并且正在寻找任何改进。
我的工作是:
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
的效果很好。但是,我在数据库级别观察到了一些细微差别,需要改进。
问题是创建了new job
,在row
表中有一个新的db
。相反,我想让它像same job
一样工作,只是添加了一些delay
(基本上我想将参数修改为re-schedule
,而相同的current job
具有相同的参数显然)。
我确实意识到,就从事同一工作而言,raising an error
可能会成功。一件好事是attempts
也增加了。但是,我希望能够在作业再次运行之前添加一个delay
(相同的作业,而无需创建新的作业)。
我该怎么做?谢谢。
答案 0 :(得分:1)
是的,您要重试而不是排队新工作。使用类方法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