用戶可以創建一個包含多個任務的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