Ruby on rails 在Rails中延迟重新排队作业的最佳方法是什么?
我想在作业完成后自动重新排队。如果未进行任何处理,将有10秒的可选延迟 我可以看到两种方法。第一个是将逻辑放入Ruby on rails 在Rails中延迟重新排队作业的最佳方法是什么?,ruby-on-rails,ruby,sidekiq,software-design,rails-activejob,Ruby On Rails,Ruby,Sidekiq,Software Design,Rails Activejob,我想在作业完成后自动重新排队。如果未进行任何处理,将有10秒的可选延迟 我可以看到两种方法。第一个是将逻辑放入perform块中。第二种方法是使用around_block功能 有什么更优雅的方式可以做到这一点 下面是一个具有这种逻辑的代码块示例 #自动处理队列 类ProcessingJob
perform
块中。第二种方法是使用around_block
功能
有什么更优雅的方式可以做到这一点
下面是一个具有这种逻辑的代码块示例
#自动处理队列
类ProcessingJob
我是否应该将环绕\u块
逻辑放入执行
功能
def perform
# will return number of processed items
processed_items_count = ProcessingService.handle_next_batch
delay_for_next_job = processed_items_count.zero? ? 10 : 0
next_job = self.class.set(wait: delay_for_next_job.seconds)
next_job.perform_later
end
您可以为下一个作业提取延迟作为私有方法等,并根据需要应用重构
为什么要在执行时使用?这里不需要工作实例。
根据您的需要,您还可以使用类似(抱歉,我对ActiveJob API不太熟悉)的方法检查当前是否有任何作业处于挂起状态。我可以将其视为arou\u perform
用法使代码更易于阅读,因为我们可以将重新排队逻辑和执行分开。不过,问题是关于最优雅的方式:)