是否有控制台命令来查看队列中的什么并清除Sidekiq中的队列?

per*_*nce 95 ruby-on-rails sidekiq

我习惯使用delayed_jobs方法进入控制台查看队列中的内容,以及在需要时清除队列的难易程度.Sidekiq中有类似的命令吗?谢谢!

mki*_*irk 131

有一个符合人体工程学的API,用于查看和管理队列.

默认情况下不需要.

require 'sidekiq/api'
Run Code Online (Sandbox Code Playgroud)

这是摘录:

# get a handle to the default queue
default_queue = Sidekiq::Queue.new 

# get a handle to the mailer queue
mailer_queue = Sidekiq::Queue.new("mailer") 

# How many jobs are in the default queue?
default_queue.size # => 1001

# How many jobs are in the mailer queue?
mailer_queue.size # => 50

#Deletes all Jobs in a Queue, by removing the queue.    
default_queue.clear
Run Code Online (Sandbox Code Playgroud)

您还可以获得一些摘要统计信息.

stats = Sidekiq::Stats.new

# Get the number of jobs that have been processed.
stats.processed # => 100

# Get the number of jobs that have failed.    
stats.failed # => 3

# Get the queues with name and number enqueued.
stats.queues # => { "default" => 1001, "email" => 50 }

#Gets the number of jobs enqueued in all queues (does NOT include retries and scheduled jobs).
stats.enqueued # => 1051 
Run Code Online (Sandbox Code Playgroud)

  • 这种方法现在可以使用(2016年8月).截至2013年,已接受的答案已过时. (7认同)

bri*_*ker 86

我还没有使用过Sidekiq,所以有可能只有查看排队作业的方法,但它们实际上只是Redis命令的包装器,因为基本上所有Sidekiq(和Resque)都是:

# See workers
Sidekiq::Client.registered_workers

# See queues
Sidekiq::Client.registered_queues

# See all jobs for one queue
Sidekiq.redis { |r| r.lrange "queue:app_queue", 0, -1 }

# See all jobs in all queues
Sidekiq::Client.registered_queues.each do |q|
  Sidekiq.redis { |r| r.lrange "queue:#{q}", 0, -1 }
end

# Remove a queue and all of its jobs
Sidekiq.redis do |r| 
  r.srem "queues", "app_queue"
  r.del  "queue:app_queue"
end
Run Code Online (Sandbox Code Playgroud)

不幸的是,删除一个特定的工作要困难得多,因为你必须复制它的确切值:

# Remove a specific job from a queue
Sidekiq.redis { |r| r.lrem "queue:app_queue", -1, "the payload string stored in Redis" }
Run Code Online (Sandbox Code Playgroud)

您可以通过redis-cli以下方式更轻松地完成所有这些工作:

$ redis-cli
> select 0 # (or whichever namespace Sidekiq is using)
> keys * # (just to get an idea of what you're working with)
> smembers queues
> lrange queues:app_queue 0 -1
> lrem queues:app_queue -1 "payload"
Run Code Online (Sandbox Code Playgroud)

  • 此处提供的某些解决方案已弃用. (27认同)
  • 正如Wagenet在上面指出的那样,这些例子已经过时了; 正如mkirk在下面指出的那样,最新文档w /示例在wiki上:https://github.com/mperham/sidekiq/wiki/API (2认同)
  • `Sidekiq::Client.registered_queues` 已替换为 `Sidekiq::Queue.all`,`Sidekiq::Client.registered_workers` 已替换为 `Sidekiq::Workers.new`,请参阅:https://github.com/mperham /sidekiq/blob/52562b715174e447a0f7666136838521fda69214/3.0-Upgrade.md (2认同)

Rub*_*der 9

如果有任何预定的工作.您可以使用以下命令删除所有作业:

Sidekiq::ScheduledSet.new.clear
Run Code Online (Sandbox Code Playgroud)

如果有任何队列要删除所有作业,可以使用以下命令:

  Sidekiq::Queue.new.clear
Run Code Online (Sandbox Code Playgroud)

还可以通过以下命令删除重试作业:

Sidekiq::RetrySet.new.clear
Run Code Online (Sandbox Code Playgroud)

以下链接有更多信息,您可以查看:https: //github.com/mperham/sidekiq/wiki/API


Ran*_*avi 7

有一个用于访问有关工作人员,队列和作业的实时信息的API.
访问https://github.com/mperham/sidekiq/wiki/API