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

问题描述 投票:3回答:2

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

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()时,我可以看到我的队列,但它们永远不会被处理。

ruby sidekiq
2个回答
2
投票

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


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
© www.soinside.com 2019 - 2024. All rights reserved.