我正在尝试创建具有可变队列名称的队列。
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()
时,我可以看到我的队列,但它们永远不会被处理。
Sidekiq Dynamic Queues宝石可能会帮助你。
只是提供一个更完整,更新的答案: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