我正在使用delayed_job並將其移至新的更強大的服務器。所以現在我想運行並行作業,就像現在I have the POWER!一樣,但是我對delay_job是否可以運行多個並行隊列感到困惑?Delayed_job - 多個並行隊列?
This question建議有命名隊列,但這些都是跑掉一個表,因此是順序?
在底部@Jesse Wolgamott建議您可以爲每個隊列創建一個表,然後平行運行。
有沒有人這樣做,他們可以指出我是如何做到的?
我正在使用delayed_job並將其移至新的更強大的服務器。所以現在我想運行並行作業,就像現在I have the POWER!一樣,但是我對delay_job是否可以運行多個並行隊列感到困惑?Delayed_job - 多個並行隊列?
This question建議有命名隊列,但這些都是跑掉一個表,因此是順序?
在底部@Jesse Wolgamott建議您可以爲每個隊列創建一個表,然後平行運行。
有沒有人這樣做,他們可以指出我是如何做到的?
隨着生產捆綁:
RAILS_ENV=production bundle exec script/delayed_job -n 4 start
或不捆綁
ruby script/delayed_job -n 4 start
這是可能的,我一直在這樣做。在我們的例子中,我們需要多個作業來處理三種不同的作業,比如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名工人。
如果你使用Rake任務作爲作業啓動機制,隊列環境變量可用於啓動按隊列分隔的不同工作。
實施例:
QUEUE=email rake jobs:work
QUEUE=build_data rake jobs:work
隊列變量允許從多個DJ隊列中的一個出列特定工人。
QUEUES=build_data,email rake jobs:work
如果您使用的是託管/雲環境,讓您能夠直接啓動腳本/工作機會有限(例如Heroku的)
特別有用。
不工作,如果我設置了多個並行作業隊列,如下所示: 'QUEUES = build_data,電子郵件耙作業:工作'然後'QUEUE =另一個數據耙作業:工作' – 2014-11-27 08:55:22
不,多名工人並行工作而不是順序工作。即使隊列全部在一個表中,工作人員也會使用sql查詢來選擇分配給它的作業隊列,按'run_at','priority'排序。因此,多名工作人員可以並行處理該表中的不同部分。 – lulalala 2012-08-16 02:57:57
我忘記了答案,所以我添加了我使用並接受的答案。我也提高了其他的... – slotishtype 2012-08-16 13:31:59