Sidekiq多个工作者?

5

我有一个关于Sidekiq的问题。我来自Resque范例,在当前应用程序中,我为每个队列启动一个工作进程,因此在终端中我会执行以下命令:

rake resque:work QUEUE='first'
rake resque:work QUEUE='second'
rake resque:work QUEUE='third'

然后,如果我想要更多的工人,例如针对第三个队列,我只需要创建更多的工人,如下所示:
rake resque:work QUEUE='third'

我的问题是...

使用Sidekiq,如何启动多个worker?我知道你可以这样做:

sidekiq -q first, -q second, -q third

但是这只会启动一个工作进程来获取所有队列。那么,我该如何启动三个工作进程,并告诉每个工作进程只关注特定的队列?另外,在Heroku上应该如何操作?


1
两个答案都没有理解问题。我相信真正的答案在于将工作者放置在不同的进程中,并指定哪些工作者随哪个队列。你对此有什么想法吗? - toddmetheny
2个回答

2
你可以使用 config/sidekiq.yml 配置文件:
# Sample configuration file for Sidekiq.
# Options here can still be overridden by cmd line args.
#   sidekiq -C config.yml
---
:verbose: true
:pidfile: ./tmp/pids/sidekiq.pid
:concurrency: 15
:timeout: 5
:queues:
  - [first, 20]
  - [second, 20]
  - [third, 1]
staging:
  :verbose: false
  :concurrency: 25
production:
  :verbose: false
  :concurrency: 50
  :timeout: 60

那样你就可以精确地配置所需内容,回答你的问题,"concurrency value" 就是你要找的,它定义了并发执行的工作者数量。
更多信息请参见:https://github.com/mperham/sidekiq/wiki/Advanced-Options

0

那么,我该如何启动三个工作者,并告诉每个工作者只关注特定的队列?

您可以通过 sidekiq_options 在工作者级别上定义它应该放置在哪个队列中。

例如,要将您的工作者放置在名为 "first" 的队列中,只需使用以下方式定义:

class MyWorker
  include Sidekiq::Worker
  sidekiq_options :queue => :first
  ...
end

这个答案讨论了为每个工作进程设置队列,但问题是关于将工作进程和它们的队列分离到不同的进程中。 - Hugo Hernani

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接