Существуют ли консольные команды для просмотра того, что находится в очереди, и для очистки очереди в Sidekiq?

Я привык использовать метод delayed_jobs для входа в консоль, чтобы увидеть, что находится в очереди, и простоту очистки очереди при необходимости. Есть ли в Sidekiq похожие команды для этого? Спасибо!

87 голосов | спросил perseverance 2 +04002012-10-02T05:05:49+04:00312012bEurope/MoscowTue, 02 Oct 2012 05:05:49 +0400 2012, 05:05:49

9 ответов


0

Я никогда не использовал 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"
ответил bricker 2 +04002012-10-02T09:25:32+04:00312012bEurope/MoscowTue, 02 Oct 2012 09:25:32 +0400 2012, 09:25:32
0

Существует эргономичный 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 
ответил mkirk 21 stEurope/Moscowp30Europe/Moscow09bEurope/MoscowSat, 21 Sep 2013 04:21:21 +0400 2013, 04:21:21
0

если есть запланированная работа. Вы можете удалить все задания, используя следующую команду:

Sidekiq::ScheduledSet.new.clear

если есть очереди, которые вы хотите удалить все задания, вы можете использовать следующую команду:

  Sidekiq::Queue.new.clear

Повторные задания также можно удалить с помощью следующей команды:

Sidekiq::RetrySet.new.clear

Более подробную информацию можно найти по следующей ссылке: вы можете оформить заказ: https://github.com/mperham/sidekiq/wiki/API

ответил Rubyrider 18 +04002014-10-18T07:19:33+04:00312014bEurope/MoscowSat, 18 Oct 2014 07:19:33 +0400 2014, 07:19:33
0

Существует API для доступа к информации в реальном времени о рабочих, очередях и заданиях.
Посетите здесь https://github.com/mperham/sidekiq/wiki/API р>

ответил Ranjithkumar Ravi 24 +04002013-10-24T11:51:36+04:00312013bEurope/MoscowThu, 24 Oct 2013 11:51:36 +0400 2013, 11:51:36
0

Обходной путь - использовать модуль тестирования (требует 'sidekiq /testing') и истощать работника (MyWorker.drain).

ответил chikamichi 14 FriEurope/Moscow2012-12-14T00:16:12+04:00Europe/Moscow12bEurope/MoscowFri, 14 Dec 2012 00:16:12 +0400 2012, 00:16:12
0

И если вы хотите очистить очередь повторов sidekiq, это: Sidekiq::RetrySet.new.clear

ответил courtsimas 10 Mayam14 2014, 08:02:18
0
$ 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"
ответил Prashant Vithani 24 J0000006Europe/Moscow 2016, 09:35:33
0

В очереди по умолчанию висели «рабочие», и я мог видеть их через веб-интерфейс. Но они не были доступны из консоли, если бы я использовал 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

Но по какой-то причине у меня не получилось в тот день

ответил Ivan Linko 4 MarpmTue, 04 Mar 2014 18:52:40 +04002014-03-04T18:52:40+04:0006 2014, 18:52:40
0

Задача Rake для очистки всех очередей sidekiq:

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

Использование:

rake sidekiq:clear
ответил Darkside 26 PM00000040000003331 2015, 16:36:33

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132