Ruby on rails 在Rails中延迟重新排队作业的最佳方法是什么?

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

我想在作业完成后自动重新排队。如果未进行任何处理,将有10秒的可选延迟

我可以看到两种方法。第一个是将逻辑放入
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
用法使代码更易于阅读,因为我们可以将重新排队逻辑和执行分开。不过,问题是关于最优雅的方式:)