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-schedule
与 current 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
我正在使用主动作业,效果非常好。当我在玩的时候,我注意到了一些东西,我正在寻找任何改进。
我有这样的工作:
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-schedule
与 current 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