ruby-on-rails Sidekiq Batch -使用perform_in调度作业,并使用回调等待完成

5m1hhzi4  于 2023-05-19  发布在  Ruby
关注(0)|答案(1)|浏览(197)

我正在考虑使用Sidekiq::Batch,并从以下参考中学习:https://github.com/sidekiq/sidekiq/wiki/Batches
我想知道以下情况是否可能,以及在这种情况下会发生什么:
在下面的示例中,我在批处理中使用perform_in调度一个作业。
MyJob的最后一个应在5小时后执行。

batch = Sidekiq::Batch.new
batch.on(:success, MyCallback)
batch.jobs do
    5.times do |index|
        MyJob.perform_in((1 * index).hour, args)
    end
end

通过设置batch.on(:success, MyCallback),我可以在所有作业完成后执行一些操作。在这里,所有的工作都应该在5小时和几分钟内完成。
我的问题是:

  • 在这种情况下,在所有作业在5小时零几分钟内完成(所有作业完成)后,回调是否会正确触发?
  • 在这种情况下,批处理在哪里等待,批处理如何知道所有作业已经完成?
  • 如果有很多批次像这样等待很长时间,会有什么负面影响吗?

我很感激任何帮助,因为我不熟悉Sidekiq,提前谢谢你。

t98cgbkg

t98cgbkg1#

1.在这种情况下,在所有作业在5小时零几分钟内完成(所有作业完成)后,回调是否会正确触发?
是的
1.在这种情况下,批处理在哪里等待,批处理如何知道所有作业已经完成?
Redis中有一个批处理计数器,上面写着5个作业。当每个作业完成时,该计数器递减。为0时,将触发回调。
1.如果有很多批次像这样等待很长时间,会有什么负面影响吗?
一点也不。批处理只是数据,它不执行,也不消耗任何资源,只有作业和回调实际执行。

相关问题