Sidekiq没有处理队列

0x4*_*672 57 redis ruby-on-rails-3 sidekiq

Sidekiq可能会阻止处理队列中的作业有什么可能的原因?队列已满.日志文件sidekiq.log表示根本没有活动.因此队列已满,但日志为空,而Sidekiq似乎不处理项目.似乎没有工人处理工作.重新启动Redis或使用FLUSHALLFLUSHDB将其刷新为无效.Sidekiq已经开始了

捆绑exec 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
Run Code Online (Sandbox Code Playgroud)

你怎么知道出了什么问题?有没有隐藏的日志文件?

0x4*_*672 131

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

# configuration file for Sidekiq
:queues:
  - queue_name_1
  - queue_name_2
Run Code Online (Sandbox Code Playgroud)

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

bundle exec sidekiq -C ./config/sidekiq.yml
Run Code Online (Sandbox Code Playgroud)

或者你可以直接传递队列名称(逗号后面不允许有空格):

bundle exec sidekiq -q queue_name_1,queue_name_2
Run Code Online (Sandbox Code Playgroud)

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

  • >或者您可以直接传递队列名称(逗号后面不允许空格):您确定这样可以吗?Shoulden不是`sidekiq -q queue_name_1 -q queue_name_2` (3认同)
  • 对我来说,问题是我的工作人员将“ queue_as”设置为不在我的“ sidekiq.yml”文件中的队列。 (2认同)
  • 我不知道2013年是否属实,但2017年sidekiq**自动加载**`/ config/sidekiq.yml`. (2认同)

Edg*_*ega 7

如果您config/sidekiq.yml检查了那里定义的所有队列,请检查以下示例文件:https://github.com/mperham/sidekiq/blob/master/examples/config.yml

如果要在命令行或Procfile中传递队列名称,则类似于

bin/sidekiq -q queue1 -q queue2
bundle exec sidekiq -q queue1 -q queue2
Run Code Online (Sandbox Code Playgroud)

检查是否在那里定义了所有队列.

如果您不确定队列的名称,可以使用以下脚本找出它:

require "sidekiq/api"
stats = Sidekiq::Stats.new
stats.queues
# {"production_mailers"=>25, "production_default"=>1}
Run Code Online (Sandbox Code Playgroud)

然后,您可以使用队列执行操作:

queue = Sidekiq::Queue.new("production_mailers")
queue.count
queue.clear
Run Code Online (Sandbox Code Playgroud)


khi*_*eoy 6

我花了几个小时才发现我已经设置了config.active_job.queue_name_prefix = "xxxxx_#{Rails.env}"。设置中的队列名称看起来相同,但 sidekiq 查找带有前缀的队列。

设置错误

app/jobs/my_job.rb

class MyJob < ApplicationJob
  queue_as :default
end
Run Code Online (Sandbox Code Playgroud)

config/sidekiq.yml

:queues:
  - default
Run Code Online (Sandbox Code Playgroud)

正确设置

app/jobs/my_job.rb

class MyJob < ApplicationJob
  queue_as :default
end
Run Code Online (Sandbox Code Playgroud)

config/sidekiq.yml

:queues:
  - xxxxx_development_default
  - xxxxx_production_default
Run Code Online (Sandbox Code Playgroud)


Hac*_*ron 5

我的问题是我的初始化程序中有一个configure_server,但没有configure_client,你必须同时拥有:

Sidekiq.configure_server do |config|
  config.redis = { url: ENV.fetch('SIDEKIQ_REDIS_URL', 'redis://127.0.0.1:6379/1') }
end

Sidekiq.configure_client do |config|
  config.redis = { url: ENV.fetch('SIDEKIQ_REDIS_URL', 'redis://127.0.0.1:6379/1') }
end
Run Code Online (Sandbox Code Playgroud)