【问题标题】:Call function when a sidekiq-superworker's superjob is completed当 sidekiq-superworker 的 superjob 完成时调用函数
【发布时间】:2015-09-21 00:17:54
【问题描述】:

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

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

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

【问题讨论】:

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


    【解决方案1】:

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

    根据sidekiq-sperworker gem docs,您可以设置第三个worker并将其添加到superworker,从而确保它仅在之前的所有工作完成后运行。

    使用您的示例,它将如下所示:

    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
    

    【讨论】:

    • 嗯,这基本上解决了问题。我想要调用应用程序代码,而不是另一个 Worker,但是好的,我将为此创建一个专用的 Worker
    猜你喜欢
    • 2020-07-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-22
    相关资源
    最近更新 更多