2015-07-03 4 views
5

У меня есть настройка двух рабочих Sidekiq в приложении Rails 4.2, где первая выполняет несколько заданий, а другая отправляет электронную почту, когда все эти задания были завершены. Эти два соединены в этом superworker:Функция вызова при завершении суперзбука 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 или любого другого бесплатного инструмента?

ответ

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 
+0

Ну, это в основном решает эту проблему. Мне нужен код приложения, а не другой «Рабочий», который будет вызван, но ОК, я создам для этого выделенный «Рабочий». – mudasobwa