yml workers retries rails queues priority create ruby-on-rails sidekiq

ruby-on-rails - workers - sidekiq rails jobs



¿Hay comandos de consola para ver qué está en la cola y borrar la cola en Sidekiq? (9)

Estoy acostumbrado a usar el método de retraso de ir a la consola para ver lo que está en la cola, y la facilidad de borrar la cola cuando sea necesario. ¿Hay comandos similares en Sidekiq para esto? ¡Gracias!


Hay una github.com/mperham/sidekiq/wiki/API ergonómica github.com/mperham/sidekiq/wiki/API .

No es requerido por defecto.

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



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


Nunca utilicé Sidekiq, por lo que es posible que haya métodos solo para ver los trabajos en cola, pero en realidad solo serían envoltorios de los comandos de Redis, ya que básicamente todo lo que Sidekiq (y Resque) es:

# 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ía 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"


Rake task 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


Una solución alternativa es usar el módulo de prueba (requiere ''sidekiq / testing'') y drenar al trabajador (MyWorker.drain).


Y si desea borrar la cola de reintentos sidekiq, es esto: Sidekiq::RetrySet.new.clear


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

Sidekiq::ScheduledSet.new.clear

si hay colas en las que desea eliminar todos los trabajos, puede usar el siguiente comando:

Sidekiq::Queue.new.clear

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

Sidekiq::RetrySet.new.clear

Hay más información aquí en el siguiente enlace, puede realizar la compra: github.com/mperham/sidekiq/wiki/API


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