2012-02-28 97 views
16

我正在使用delayed_job並將其移至新的更強大的服務器。所以現在我想運行並行作業,就像現在I have the POWER!一樣,但是我對delay_job是否可以運行多個並行隊列感到困惑?Delayed_job - 多個並行隊列?

This question建議有命名隊列,但這些都是跑掉一個表,因此是順序?

在底部@Jesse Wolgamott建議您可以爲每個隊列創建一個表,然後平行運行。

有沒有人這樣做,他們可以指出我是如何做到的?

+0

不,多名工人並行工作而不是順序工作。即使隊列全部在一個表中,工作人員也會使用sql查詢來選擇分配給它的作業隊列,按'run_at','priority'排序。因此,多名工作人員可以並行處理該表中的不同部分。 – lulalala 2012-08-16 02:57:57

+0

我忘記了答案,所以我添加了我使用並接受的答案。我也提高了其他的... – slotishtype 2012-08-16 13:31:59

回答

11

隨着生產捆綁:

RAILS_ENV=production bundle exec script/delayed_job -n 4 start

或不捆綁

ruby script/delayed_job -n 4 start

+1

我還沒有嘗試過-i選項,但是當你指定一個隊列時,-n選項似乎不起作用。您將會運行多個工作人員,但只有一名工作人員將應用於實際的線程。 – Dex 2014-05-10 22:54:52

+0

「-n 4」 - 這是個大錯誤!使用-n4,沒有空間!在那上面幾個小時就瘦了。 – 2015-05-26 12:54:13

+0

@AndrewRukin文檔明確提到-n 2(帶空格...)請參閱此處:https://github.com/collectiveidea/delayed_job#running-jobs – rept 2016-01-27 00:15:25

28

這是可能的,我一直在這樣做。在我們的例子中,我們需要多個作業來處理三種不同的作業,比如queue_a,queue_b和queue_c。系統將在delayed_job表和適當命名的隊列中創建條目。

RAILS_ENV=production script/delayed_job -i first --queue=queue_a start 
RAILS_ENV=production script/delayed_job -i second --queue=queue_a start 
RAILS_ENV=production script/delayed_job -i third --queue=queue_b start 
RAILS_ENV=production script/delayed_job -i fourth --queue=queue_c start 

每個命令啓動多個延遲作業將創建一個delayed_job的,所以會有現在4並行作業,其中兩個服務queue_a每一個queue_b和queue_c。這裏關鍵的是通過指定實例名稱的-i選項傳遞的標識符,並且我們可以根據需要啓動和停止作業。

另一個選擇是使用工作者池。

RAILS_ENV=production script/delayed_job --pool=tracking --pool=mailers,tasks:2 --pool=*:2 start 

該命令將啓動1名工人的追蹤隊列,2名工人的郵件程序和任務隊列,以及任何作業2名工人。

+0

你碰巧知道,如果最後一個(任何工作的2名工人)也將從其他隊列(追蹤,郵寄者,任務)或只有沒有指定隊列的工作中獲得工作? – Machisuji 2015-03-24 09:48:18

+0

我認爲這裏需要修改指定多個實例。語法應該像這樣RAILS_ENV =生產腳本/ delayed_job --queue = queue_a -i one1 start,注意-i和實例名稱之間的空格。 – 3coins 2015-09-21 20:54:52

+0

謝謝,這個對我來說工作得很好......謝謝!我還沒有檢查出-n選項... – Gnana 2016-06-02 13:29:44

3

如果你使用Rake任務作爲作業啓動機制,隊列環境變量可用於啓動按隊列分隔的不同工作。

實施例:

QUEUE=email rake jobs:work 
QUEUE=build_data rake jobs:work 

隊列變量允許從多個DJ隊列中的一個出列特定工人。

QUEUES=build_data,email rake jobs:work 
如果您使用的是託管/雲環境,讓您能夠直接啓動腳本/工作機會有限(例如Heroku的)

特別有用。

+0

不工作,如果我設置了多個並行作業隊列,如下所示: 'QUEUES = build_data,電子郵件耙作業:工作'然後'QUEUE =另一個數據耙作業:工作' – 2014-11-27 08:55:22