如何运行作业与sidekiq同步

How to run the job synchronously with sidekiq

目前我正在使用 Sidekiq 在 ruby 轨道上处理队列作业。我有 2 个相互依赖的工作,我希望第一个工作在开始第二个工作之前先完成,所以有什么方法可以用 Sidekiq 来完成。

是的,您可以使用 YourSidekiqJob.new.perform(parameters_to_the_job) 模式。这将 运行 您的作业同步有序。

但是,这里有两件事需要考虑:

  1. 如果第一份工作失败怎么办?
  2. 每项工作需要多长时间运行?

对于 #2,模式阻止执行每个作业花费的时间长度 运行。如果作业在 运行 时间内非常短,为什么首先使用这些作业?如果它们很长,您是否希望用户等到它们完成?

或者,您可以将第二个作业的 运行ning 安排在第一个作业正文的最后一行。您仍然需要考虑作业 #1 或 #2 的失败模式。此外,您还需要考虑到,由于调度时间队列的状态,作业在计划为 运行 时不一定 运行。这对您的业务逻辑有何影响?

希望对您有所帮助

--根据上次评论编辑

class SecondJob < SidekiqJob
  def perform(params)
    data = SomeData.find
    return unless data.ready?
    # do whatever you need to do with the ready data
  end
end