当sidekiq-superworker的superjob完成时调用函数

Geo*_*a.b 5 ruby ruby-on-rails redis sidekiq ruby-on-rails-4

我在我的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
Run Code Online (Sandbox Code Playgroud)

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

And*_*eko 2

我不知道这是否是一个选项,但如果我没有记错的话,它看起来很像你所需要的。

根据sidekiq-sperworker gem 文档,您可以设置第三个工作程序并将其添加到超级工作程序,从而确保它仅在所有前面的工作完成时才运行。

根据您的示例,它将如下所示:

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
Run Code Online (Sandbox Code Playgroud)