一尘不染

Sidekiq不处理队列

redis

Sidekiq可以阻止哪些可能的原因来处理队列中的作业?队列已满。日志文件sidekiq.log表明完全没有活动。因此,队列已满,但日志为空,Sidekiq似乎未处理项目。似乎没有工人在处理工作。重新启动Redis或用FLUSHALLFLUSHDB冲洗无效。Sidekiq已开始于

捆绑执行程序sidekiq -L log / sidekiq.log

并生成以下日志文​​件:

2013-05-30..Booting Sidekiq 2.12.0 using redis://localhost:6379/0 with options {}
2013-05-30..Running in ruby 1.9.3p374 (2013-01-15 revision 38858) [i686-linux]
2013-05-30..See LICENSE and the LGPL-3.0 for licensing details.
2013-05-30..Starting processing, hit Ctrl-C to stop

您如何找出问题所在?是否有隐藏的日志文件?


阅读 355

收藏
2020-06-20

共1个答案

一尘不染

原因是在我们的案例中:Sidekiq可能查找错误的队列。默认情况下,Sidekiq使用名为“默认”的队列。我们使用了两个不同的队列名称,并在config /
sidekiq.yml中定义了它们。

# configuration file for Sidekiq
:queues:
  - queue_name_1
  - queue_name_2

问题在于,默认情况下,此配置文件 不会 在您的开发环境中通过简单的命令 自动加载
(不同于database.ymlthinking_sphinx.yml例如)bundle exec sidekiq。因此,我们将作业写在两个特定的队列中,而Sidekiq正在等待第三个队列(默认队列)中的作业。您必须通过-C--config选项将路径作为参数传递到配置文件:

bundle exec sidekiq -C ./config/sidekiq.yml

或者,您可以直接传递队列名称(逗号后在此处不允许空格):

bundle exec sidekiq -q queue_name_1,queue_name_2

要找出问题所在,也可以通过选项-v--verbose在命令行中传递或在文件中使用是很有帮助:verbose: truesidekiq.yml。如果未加载配置文件,则配置文件中定义的所有内容当然都是无用的。因此,请确保首先使用正确的配置文件。

2020-06-20