用户可以创建一个包含多个任务的Project
对象。当用户将项目告知execute
时,所有这些任务都将置于Sidekiq的默认队列中。Sidekiq的民主队列
问题是:如果用户创建一个包含1000个任务的项目并击中了按钮,则所有这1000个任务都将排队。如果在此之后,另一个用户创建一个只有一个任务的项目,当他点击执行这个项目时,其唯一的任务就放在行的末尾。
我希望后台进程能够以更民主的方式工作。如果每个项目都有自己的队列,则可能是第二个项目中的一个任务在1000个任务队列结束之前执行。
为此,我将需要每个项目的分隔队列,并且应该动态创建它。我试图完成,使用替代以下的perform_async
:
Sidekiq::Client.push('queue' => "project_#{self.project.id}", 'class' => TaskWorker, 'args' => [self.id])
然而,当我尝试execute
一个项目,所有的任务都放在一个名为“project_somenumber”队列但执行没有。看来,当我使用Sidekiq::Client.push
时,我需要告诉队列开始执行。这是对的吗?我怎样才能开始那队列?
这个改变了吗?我们一直在使用sidekiq作为我们的应用程序之一,但规格现在正在调用动态生成的队列(每个设备都有一个)。每当我们添加一个设备来获取新队列时,必须重新启动应用程序将是荒谬的。 – 2013-09-25 20:59:59