108 votes

Existe-t-il des commandes de la console permettant d’examiner ce qui se trouve dans la file d’attente et de la nettoyer dans Sidekiq?

Je suis habitué à utiliser la méthode delay_jobs d'aller dans la console pour voir ce qu'il y a dans la file d'attente et la facilité de vider la file d'attente en cas de besoin. Existe-t-il des commandes similaires dans Sidekiq pour cela? Merci!

154voto

mkirk Points 920

Il existe une API pour afficher et gérer les files d'attente .

Ce n'est pas requis par défaut.

 require 'sidekiq/api'
 

Voici l'extrait:

 # 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
 

Vous pouvez également obtenir des statistiques sommaires.

 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 
 

93voto

bricker Points 6213

Je n'ai jamais utilisé Sidekiq, il est donc possible qu'il existe des méthodes que pour la visualisation de la file d'attente des emplois, mais ils seraient vraiment juste être wrappers autour Redis commandes, car c'est fondamentalement tout Sidekiq (et Resque) est:

# 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

Malheureusement, la suppression d'un travail spécifique est un peu plus difficile que vous auriez à copier sa valeur exacte:

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

Vous pourriez faire tout cela encore plus facilement par d' 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"

11voto

Irfan Ahmed Points 456

si il n'y a aucune tâche planifiée. Vous pouvez supprimer toutes les tâches à l'aide de la commande suivante:

Sidekiq::ScheduledSet.new.clear

si il y a des files d'attente que vous vouliez supprimer tous les travaux, vous pouvez utiliser la commande suivante:

  Sidekiq::Queue.new.clear

Les tentatives d'Emplois pourraient être supprimés par la commande suivante aussi:

Sidekiq::RetrySet.new.clear

Il y a plus d'informations ici sur le lien suivant, vous pouvez la caisse: https://github.com/mperham/sidekiq/wiki/API

8voto

Ranjithkumar Ravi Points 851

Il existe une API pour accéder aux informations en temps réel sur les travailleurs, les files d'attente et les travaux.
Visitez ici https://github.com/mperham/sidekiq/wiki/API

2voto

jdvauguet Points 829

Une solution de contournement consiste à utiliser le module de test (nécessite 'sidekiq / testing') et à drainer le travailleur (MyWorker.drain).

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X