2013-12-12 55 views
3

我有一個關於Sidekiq的問題。我來自Resque模式,並在目前的應用程序,我發動每個隊列一個工人,所以在終端,我會做:Sidekiq多名工人?

rake resque:work QUEUE='first' 
rake resque:work QUEUE='second' 
rake resque:work QUEUE='third' 

然後,如果我想更多的工人,例如用於第三隊列,我剛剛創造更多的工人:

rake resque:work QUEUE='third' 

我的問題是...

隨着Sidekiq,你會如何開始與多個工人呢?我知道你可以做到這一點:

sidekiq -q first, -q second, -q third 

但是,這隻會啓動一個工人,提取所有這些隊列。那麼,我該如何去啓動三名工人,並告訴每個工人只專注於一個特定的隊列?另外,如何在Heroku中做到這一點?

+0

定義它既不答案的理解問題。我相信實際的答案在於將工人放在不同的流程中,並指定哪些工人與哪個隊列一起排隊。你有沒有想過這件事? – toddmetheny

回答

3

你可以在配置/ sidekiq.yml使用的配置文件:

# Sample configuration file for Sidekiq. 
# Options here can still be overridden by cmd line args. 
# sidekiq -C config.yml 
--- 
:verbose: true 
:pidfile: ./tmp/pids/sidekiq.pid 
:concurrency: 15 
:timeout: 5 
:queues: 
    - [first, 20] 
    - [second, 20] 
    - [third, 1] 
staging: 
    :verbose: false 
    :concurrency: 25 
production: 
    :verbose: false 
    :concurrency: 50 
    :timeout: 60 

這樣,你可以你想要什麼配置,並準確地回答你的問題併發值是你在尋找熱塑成型什麼,它定義了執行的併發工人數量。

此處瞭解詳情:https://github.com/mperham/sidekiq/wiki/Advanced-Options

2

所以,我將如何去啓動三名工人,並告訴每個工人 只專注於一個特定的隊列?

您可以通過sidekiq_options在工人級別上定義應在哪個隊列中放置它。

要你的工人把例如在一個名爲隊列「第一」只是

class MyWorker 
    include Sidekiq::Worker 
    sidekiq_options :queue => :first 
    ... 
end