sidekiq有多个队列:工作陷入困境

时间:2017-12-19 09:00:45

标签: ruby-on-rails ruby capistrano sidekiq jobs

我最近不得不优先考虑我的Sidekiq队列(在我只使用default队列之前)。

所以我写了几个应该在不同队列上执行的作业。

我的sidekiq.yml

:queues:
  - slack_notifier
  - invoicing
  - default

deploy.rb(卡皮斯特拉诺):

# ...
set :sidekiq_config, "#{current_path}/config/sidekiq.yml"
# probably below line does same thing as above one
set :sidekiq_options_per_process, ['--queue slack_notifier --queue invoicing --queue default']
# ...

我可以在部署时看到它正在被使用:

01:32 sidekiq:start
      01 $HOME/.rbenv/bin/rbenv exec bundle exec sidekiq --index 0 --pidfile /home/ubuntu/cap/shared/tmp/pids/sidekiq.pid --environment production --logfile /home/ubuntu/cap/shared/log/sidekiq.log --config /home/ubuntu/cap/current/config/sidekiq.yml --queue slack_notifier --queue invoicing --queue default --daemon

Sidekiq正在运行:

ps aux | grep '[s]idekiq'
#=> ubuntu     716 16.4  2.1 668604 176860 ? Sl   07:31  14:18 sidekiq 4.2.6 cap [1 of 1 busy]

现在,当我开始工作时,他们似乎暂时停止了。

不确定我是否可以更好地描述问题。当我清除两个优先级队列(slack_notifierinvoicing)时,默认仍然无法处理作业。

1 个答案:

答案 0 :(得分:0)

也许您可以为所有队列运行多个进程,将单独的队列放在单独的进程中以处理sidekiq作业。您的配置将如下所示:

set :sidekiq_processes, 3
set :sidekiq_options_per_process, ['--queue slack_notifier', '--queue invoicing', '--queue default']

我认为这不会停止sidekiq,但是所有事情的前提是您的sidekiq进程已得到充分优化,因此它们不会占用比预期更多的内存。