【发布时间】:2020-11-02 08:42:08
【问题描述】:
我希望 Worker 能够从两个队列中获取作业,每个队列具有不同的优先级。
现在,我的工人看起来像这样:
class OrderWorker
include Sidekiq::Worker
sidekiq_options retry: false, queue: :orders
end
但是我想要另一个队列具有更高优先级的订单,并让工作人员使用另一个队列。 Sidekiq 甚至可以做到这一点吗?如果是这样,在你做OrderWorker.perform_async(...)的时候,你如何指定哪个队列?
谢谢!
【问题讨论】:
-
@colinm 队列权重可以工作,只要我可以指定一个工作人员将使用两个队列。我有一个带有发送电子邮件队列的工作人员,但是我需要两个额外的订单队列。我只需要再增加一名工人来专注于这两个订单队列。
-
这正是加权的工作原理。每次运行
sidekiq(无论是在传统 CLI 上还是通过 Procfile),您都在启动一个 worker。如果您在命令行上传递加权选项,它们只会影响传递给它们的一个工作人员。您可以指定单个工作人员处理任意数量的队列。 -
colinm,但是我如何将特定作业排入特定队列?通常你会做 MyWorker.perform_async(args)。你如何告诉它在一个特定的队列中排队?你能写一个例子作为答案,所以我可以接受吗?我认为这对你来说真的很清楚,但现在对我来说不是。
-
我也有同样的问题。我希望一名工作人员同时处理高优先级和低优先级队列中的作业,并希望能够将特定作业排入特定队列。
标签: ruby-on-rails sidekiq