我习惯使用delayed_jobs方法进入控制台查看队列中的内容,以及在需要时清除队列的难易程度。 Sidekiq中有类似的命令吗?谢谢!
答案 0 :(得分:127)
符合人体工程学API for viewing and managing queues。
默认情况下不需要。
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
答案 1 :(得分: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
不幸的是,删除特定的工作要困难得多,因为您必须复制其确切的值:
# 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"
答案 2 :(得分:9)
如果有任何预定的工作。您可以使用以下命令删除所有作业:
Sidekiq::ScheduledSet.new.clear
如果您要删除所有作业的队列,可以使用以下命令:
Sidekiq::Queue.new.clear
重试作业也可以通过以下命令删除:
Sidekiq::RetrySet.new.clear
以下链接中有更多信息,您可以结帐: https://github.com/mperham/sidekiq/wiki/API
答案 3 :(得分:7)
有一个用于访问有关工人,队列和工作的实时信息的API 访问https://github.com/mperham/sidekiq/wiki/API
答案 4 :(得分:2)
解决方法是使用测试模块(需要'sidekiq / testing')并排空工作人员(MyWorker.drain)。
答案 5 :(得分:2)
如果你想清除sidekiq重试队列,就是这样:Sidekiq::RetrySet.new.clear
答案 6 :(得分:2)
$ 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"
答案 7 :(得分:1)
默认队列中有“工人”被绞死,我可以通过网络界面看到它们。但如果我使用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我能够找到它们
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"
...
解决方案是:
irb(main):003:0> Sidekiq.redis { |r| r.del "workers", 0, -1 }
=> 1
同样在Sidekiq v3中有一个命令
Sidekiq::Workers.new.prune
但由于某种原因,那天它对我不起作用
答案 8 :(得分:1)
清除所有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