2015-09-09 49 views
8

看看下面的工作我會假定作業在low_priority隊列上運行。ActiveJob是否具有特定優先級的隊列?

class GuestsCleanupJob < ActiveJob::Base 
    queue_as :low_priority 
    #.... 
end 

我同意這一點,但這只是隊列名稱正確嗎?它實際上與優先級無關。例如,如果我使用名爲:my_queue的隊列創建作業,它將被視爲具有與:low_priority隊列相同的優先級。

從文檔中我找不到任何指示我可以優先排隊的作業的任何內容。我知道delayed_jobs有這個功能,但我還沒有在active_job中找到它。

回答

4

優先級取決於實際的QueueAdapter以及如何配置此適配器。如果您的適配器不支持優先級或未正確配置,則ActiveJob也無法幫助您。

從這裏瞭解有關適配器的更多細節:

http://edgeapi.rubyonrails.org/classes/ActiveJob/QueueAdapters.html

主要外賣是這樣的:

主要的一點是要確保所有的Rails應用程序將在一個工作基礎地點。然後,我們可以在其上構建框架功能和其他寶石,而不必擔心各種作業運行程序之間的API差異,例如Delayed Job和Resque。那麼,挑選你的排隊後端成爲更多的操作問題。而且您可以在不需要重寫任務的情況下在它們之間切換。

隊列配置(包括優先級)成爲適配器的責任。

由於隊列配置的一個例子見Sidekiq維基:

https://github.com/mperham/sidekiq/wiki/Advanced-Options#queues

+1

是的,這是有道理的,但delayed_job的和sidekiq都支持隊列和優先級,您可以在工作級別設置此。如果您使用的是delayed_job或sidekiq適配器,活動作業是否支持此操作?這聽起來像你說的是...但是沒有任何文件實際上有幫助。我已經看過你在發佈這個問題之前添加的參考資料,但我找不到任何東西......或許我錯過了一些東西? –

+0

您需要閱讀適用於此的適配器文檔。 ActiveJob是一個抽象。 – dimakura

+1

我明白這一點。我已閱讀文檔 - 我正在使用delayed_jobs,您可以在delayed_job上設置作業的優先級,例如'handle_asynchronously:send_mailer,:priority => 20'.With sidekiq我可以看到這是可能的,因爲您可以設置隊列和優先級一個配置文件。延遲作業似乎沒有這個。我的問題是如何使用ActiveJob的抽象,以設置優先級...這可能通過ActiveJob或我必須使用delayed_job?看着ActiveJob中的delayed_job適配器,這似乎不可能。我不確定還有什麼要說的更清楚。 –