我在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或任何其他免费工具?
答案 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