有没有控制台命令来查看队列中的内容,并清除Sidekiq中的队列?

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

我从来没有使用过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 

不幸的是,删除一个特定的工作有点难度,因为你必须复制它的确切值:

 # Remove a specific job from a queue Sidekiq.redis { |r| r.lrem "queue:app_queue", -1, "the payload string stored in Redis" } 

你可以通过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" 

有一个符合人体工程学的API来查看和pipe理队列 。

这是默认情况下不需要的。

 require 'sidekiq/api' 

这是摘录:

 # 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 

你也可以得到一些汇总统计。

 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 

如果有任何计划的工作。 您可以使用以下命令删除所有作业:

 Sidekiq::ScheduledSet.new.clear 

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

  Sidekiq::Queue.new.clear 

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

 Sidekiq::RetrySet.new.clear 

这里有更多的信息在下面的链接,你可以结帐: https : //github.com/mperham/sidekiq/wiki/API

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

一个解决方法是使用testing模块(require'sidekiq / testing')并排除worker(MyWorker.drain)。

如果你想清除sidekiq重试队列,就是这样的: Sidekiq::RetrySet.new.clear

 $ 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 queue:queue_name 0 -1 # (queue_name must be your relevant queue) > lrem queue:queue_name -1 "payload" 

有被暂停排队的“工人”,我可以通过networking界面看到他们。 但是,如果我使用了Sidekiq :: Queue.new.size,那么它们不能从控制台使用

 irb(main):002:0> Sidekiq::Queue.new.size 2014-03-04T14:37:43Z 17256 TID-oujb9c974 INFO: Sidekiq client with redis options {:namespace=>"sidekiq_staging"} => 0 

使用redis-cli我能find它们

 redis 127.0.0.1:6379> keys * 1) "sidekiq_staging:worker:ip-xxx-xxx-xxx-xxx:7635c39a29d7b255b564970bea51c026-69853672483440:default" 2) "sidekiq_staging:worker:ip-xxx-xxx-xxx-xxx:0cf585f5e93e1850eee1ae4613a08e45-70328697677500:default:started" 3) "sidekiq_staging:worker:ip-xxx-xxx-xxx-xxx:7635c39a29d7b255b564970bea51c026-69853672320140:default:started" ... 

解决scheme是:

 irb(main):003:0> Sidekiq.redis { |r| r.del "workers", 0, -1 } => 1 

在Sidekiq v3中也有一个命令

 Sidekiq::Workers.new.prune 

但是由于某种原因,那天它不适合我

清除所有sidekiq队列的Rake任务:

 namespace :sidekiq do desc 'Clear sidekiq queue' task clear: :environment do require 'sidekiq/api' Sidekiq::Queue.all.each(&:clear) end end 

用法:

 rake sidekiq:clear