【发布时间】:2013-11-05 09:20:47
【问题描述】:
我必须根据用户的请求运行多个作业。然而,其中只有一个是重要的。
所以我有一个MainWorker 在其perform 方法中调用不同的其他工作人员,例如Worker1、Worker2。
Worker1 和 Worker2 可以延迟,我需要优先 MainWorker。
这就是我的 perform 方法现在的样子
class MainWorker
def perform( user_id )
User.find( user_id ).main_task
Worker1.perform_async( user_id )
Worker2.perform_async( user_id )
end
end
我以后可能会有更多的子工人出现。我想知道这是否是一种好的做法,或者有更好的方法来做到这一点。但是,我将自定义队列名称和优先级分配给基于工作人员的队列名称。
【问题讨论】:
-
是否需要在 main_task 之后立即运行 Worker1 和 Worker2?或者也许所有这些都可以同时运行?
-
它们可以延迟,它们不需要同时运行,但Worker1和Worker2必须在MainWorker perform方法完成后运行,即主任务。
-
所以,我没有看到任何更好的解决方案来解决您的问题
-
perform_aync???你不是说perform_async吗?
标签: ruby-on-rails-3 ruby-on-rails-3.2 redis sidekiq