有没有控制台命令来查看队列中的内容,并清除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