我正在尝试创建具有可变队列名称的队列。
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()
时,我可以看到我的队列,但它们从未被处理过。
答案 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