我希望Worker能够从两个队列中获取作业,每个队列具有不同的优先级。
现在,我的工作人员看起来像这样:
class OrderWorker
include Sidekiq::Worker
sidekiq_options retry: false, queue: :orders
end
但是我想拥有另一个具有更高优先级的命令的队列,并让工作者使用其他队列。 Sidekiq甚至可以做到这一点吗?如果是,那么在您执行OrderWorker.perform_async(...)
时,如何指定哪个队列?
谢谢!
答案 0 :(得分:2)
您可以将queue
作为选项传递:
OrderWorker.perform_async(:queue => 'high')
OrderWorker.perform_async(:queue => 'default') # default is 'default' anyway
perform_async
和perform_in
调用方法push,其中包含queue
个参数。
答案 1 :(得分:0)
说实话,我不知道sidekiq是否支持这个,但如果是我,我可能只是使用继承,因为它只是简单的Ruby。
class OrderWorker
include Sidekiq::Worker
end
class HighPriorityOrderWorker < OrderWorker
sidekiq_options retry: false, queue: :high_priority_orders
end
class LowPriorityOrderWorker < OrderWorker
sidekiq_options retry: false, queue: :low_priority_orders
end