¿Hay comandos de consola para ver lo que hay en la cola y borrar la cola en Sidekiq?

StackOverflow https://stackoverflow.com//questions/12683222

  •  12-12-2019
  •  | 
  •  

Pregunta

Estoy acostumbrado a usar el método retardado_jobs para ingresar a la consola para ver qué hay en la cola y la facilidad de borrar la cola cuando es necesario.¿Existen comandos similares en Sidekiq para esto?¡Gracias!

¿Fue útil?

Solución

Nunca he usado Sidekiq, por lo que es posible que existan métodos solo para ver los trabajos en cola, pero en realidad serían solo envoltorios de los comandos de Redis, ya que eso es básicamente todo lo que es Sidekiq (y 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

Desafortunadamente, eliminar un trabajo específico es un poco más difícil ya que tendrías que copiar su valor exacto:

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

Podrías hacer todo esto aún más fácilmente a través de 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"

Otros consejos

Hay un ergonómico API para ver y administrar las colas .

No se requiere de forma predeterminada.

require 'sidekiq/api'

Aquí está el extracto:

# 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

También puede obtener algunas estadísticas de resumen.

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 

Si hay algún trabajo programado.Puede eliminar todos los trabajos usando el siguiente comando:

Sidekiq::ScheduledSet.new.clear

Si hay colas que desea eliminar todos los trabajos, puede usar el siguiente comando:

  Sidekiq::Queue.new.clear

Los trabajos reintentos se pueden eliminar con el siguiente comando también:

Sidekiq::RetrySet.new.clear

Hay más información aquí en el siguiente enlace, puede pagar: https://github.com/mperham/sidekiq/wiki/api

Hay una API para acceder a la información en tiempo real sobre trabajadores, colas y trabajos.
Visite aquí https://github.com/mperham/sidekiq/wiki/api

Una solución es usar el módulo de prueba (requieren 'sidekiq / pruebas') y para drenar al trabajador (MyWorker.Dain).

y si desea borrar la cola de reintento Sidekiq, es esto: 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"

Hubo colgados 'trabajadores' en cola predeterminada y pude verlos a través de la interfaz web.Pero no estaban disponibles en la consola si usaba 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

usando REDIS-CLI, pude encontrarlos

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"
    ...

La solución fue:

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

también en el sidekiq v3 hay un comando

Sidekiq::Workers.new.prune

Pero por alguna razón no funcionó para mí ese día

tarea de rastrillo para borrar todas las colas Sidekiq:

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

Uso:

rake sidekiq:clear

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top