Есть ли консольные команды, чтобы посмотреть, что в очереди и очистить очередь в Sidekiq?
Я привык использовать delayed_jobs метод перехода в консоль, чтобы увидеть, что в очереди, и легкость очистки очереди, когда это необходимо. Есть ли подобные команды в Sidekiq для этого? Спасибо!
9 ответов:
Я никогда не использовал 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 для просмотра и управления очередями.
по умолчанию это не требуется.
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
обходной путь заключается в использовании модуля тестирования (требуется "sidekiq/testing") и для слива рабочего (MyWorker.утечка.)
$ 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"
там были повешены "рабочие" в очереди по умолчанию, и я смог увидеть их через веб-интерфейс. Но они не были доступны из консоли, если я использовал Sidekiq:: Queue.новый.размер
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
но почему-то это не сработало для меня в тот день