如何在运行时创建带变量名的sidekiq队列?

时间:2013-11-21 22:33:36

标签: ruby sidekiq

我正在尝试创建具有可变队列名称的队列。

queue_name = "guide_" + guide['id'].to_s

Sidekiq::Client.push({
    'class' => GuidePdfWorker,
    'queue' => queue_name,
    'args'  => [key],
    'backtrace' => true
})

我知道我应该将它们添加到config / sidekiq.yml,但我不能,因为我不知道queue_name的值。

当我记录Sidekiq::Client.registered_queues()时,我可以看到我的队列,但它们从未被处理过。

2 个答案:

答案 0 :(得分:2)

Sidekiq Dynamic Queues宝石可能会帮助你。

答案 1 :(得分:0)

仅提供一个更完整,更新的答案:Sidekiq的插件和扩展可以完成类似的工作,但是Sidekiq并非旨在以这种方式操作。

  

我不建议拥有多个队列...而且Sidekiq Pro无法可靠地处理多个队列而不进行轮询

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

  

应尽量减少使用的命名队列的数量。

https://github.com/mperham/sidekiq/issues/835

相反,请考虑与一个已知的静态队列以及一个根据您希望动态的对象进行调度的工作人员进行交互:

class GuidePdfWorker
  include Sidekiq::Worker

  sidekiq_options queue: 'default'

  def perform(guide)
    # branch on guide['id'], perhaps re-queue in higher or lower priority queue?
  end
end