查看下面的工作,我会假设作业在low_priority
队列上运行。
class GuestsCleanupJob < ActiveJob::Base
queue_as :low_priority
#....
end
我同意这一点,但这只是队列的名称正确吗?它实际上与优先级无关。例如,如果我创建了一个名为:my_queue
的队列的作业,它将被视为具有与:low_priority
队列相同的优先级。
从文档中我无法找到任何表明我可以优先排队的工作。我知道delayed_jobs有这个功能,但我还没有在active_job中找到它。
答案 0 :(得分:6)
优先级取决于实际的QueueAdapter以及如何配置此适配器。如果您的适配器不支持优先级或未正确配置,那么ActiveJob也无法帮助您。
从此处了解有关适配器的更多详细信息:
http://edgeapi.rubyonrails.org/classes/ActiveJob/QueueAdapters.html
主要内容是:
重点是确保所有Rails应用程序都具有适当的作业基础结构。然后我们可以在此基础上构建框架功能和其他宝石,而不必担心各种作业运行程序(如Delayed Job和Resque)之间的API差异。那么,挑选你的排队后端就变成了一个操作问题。而且你可以在不必重写工作的情况下在它们之间切换。
队列配置(包括优先级)成为Adapter的职责。
作为队列配置的示例,请参阅Sidekiq wiki:
https://github.com/mperham/sidekiq/wiki/Advanced-Options#queues