ActiveJob是否具有特定优先级的队列?

Rya*_*Mes 10 ruby ruby-on-rails rails-activejob

看看下面的工作,我会假设工作在low_priority队列中运行.

class GuestsCleanupJob < ActiveJob::Base
  queue_as :low_priority
  #....
end
Run Code Online (Sandbox Code Playgroud)

我同意这一点,但这只是队列的名称正确吗?它实际上与优先级无关.例如,如果我创建了一个名为queue的作业,:my_queue那么它将被视为具有与:low_priority队列相同的优先级.

从文档中我无法找到任何表明我可以优先排队的工作.我知道delayed_jobs有这个功能,但我还没有在active_job中找到它.

dim*_*ura 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

  • 您无法以编程方式通过 ActiveJob 设置优先级。您只需将队列命名为“low_priority”或“high_priority”,然后在程序中使用这些名称即可。实际上,您无法从程序中控制“低”是否真的“低”,“高”是否真的“高”优先级。它们只是名字。您需要为它们配置正确的权重(优先级)。 (3认同)
  • 是的,这是有道理的,但delayed_job和sidekiq都支持队列和优先级,你可以在工作级别设置它.如果您使用delayed_job或sidekiq适配器,活动作业是否支持此功能?听起来好像你说的是......但是没有一个文档真的有帮助.在发布这个问题之前,我已经查看了你添加的参考资料,但我找不到任何东西......也许我错过了什么? (2认同)
  • 我明白那个.我已经阅读了文档 - 我正在使用delayed_jobs,你可以在delayed_job上设置作业的优先级,例如`handle_asynchronously:send_mailer,:priority => 20`.有了sidekiq我可以看到它是可能的,因为你设置了队列和优先级配置文件.延迟作业似乎没有这个.我的问题是如何使用ActiveJob的抽象来设置优先级......这可能是通过ActiveJob还是我必须使用delayed_job?看看ActiveJob中的delayed_job适配器,这似乎不可能.我不知道还有什么可说的更清楚. (2认同)
  • 这就是我想要证实的.从我在delayed_job上使用activejob看到的,实际配置权重是不可能的?您只能在配置中设置默认权重.如果在delayed_job之上使用activejob,则无法实际设置每个作业或队列的权重,因为通过activejob的抽象没有入口点. (2认同)
  • 由于这个问题似乎得到了一些点击,对于那些可能感兴趣的人,我写了一些功能并将它合并到DJ中以实际处理优先级的队列.这应该与ActiveJob一起使用DJ配置文件.https://github.com/collectiveidea/delayed_job/pull/845#issuecomment-178173963 (2认同)