完成sidekiq-superworker的超级工作时的通话功能

时间:2015-07-03 08:24:00

标签: ruby-on-rails ruby ruby-on-rails-4 redis sidekiq

我在Rails 4.2应用程序中设置了两个Sidekiq工作人员,其中第一个执行多个作业,另一个在所有这些作业完成后发送电子邮件。这两个人在这个超级工作者中耦合:

Superworker.define(:PrioritySuperworker, :object_class, :object_id, :priority_ids) do
  batch priority_ids: :priority_id  do
    PriorityMailsWorker :object_class, :object_id, :priority_id
  end
  SendConfirmationWorker :object_class, :object_id
end

我想在调用这个超级工作者的模型中执行另一个操作,但是只有当superjob已经完成时(这意味着其中的所有子工作也已完成)。我已经看到Sidekiq Pro可以在完成批处理时触发回调但是我无法负担使用它,因为我在开源平台上工作。有没有办法使用Superworker或任何其他免费工具?

1 个答案:

答案 0 :(得分:2)

我不知道这是不是一个选项,但如果我没有弄错,它看起来就像你需要的那样。

根据sidekiq-sperworker gem docs,您可以设置第三个工作人员并将其添加到超级工作者,从而确保它仅在以前完成所有工作时运行。

通过您的示例,它将如下所示:

Superworker.define(:PrioritySuperworker, :object_class, :object_id, :priority_ids) do
  batch priority_ids: :priority_id  do
    PriorityMailsWorker          :object_class, :object_id, :priority_id
  end
  SendConfirmationWorker         :object_class, :object_id
  PerformAnotherOperationInModel :object_class, :object_id
end