web-dev-qa-db-fra.com

Comment détruire les emplois mis en file d'attente par les ouvriers?

J'utilise Resque sur un projet Rails-3 pour gérer les travaux dont l'exécution est planifiée toutes les 5 minutes. J'ai récemment fait quelque chose qui a fait boule de neige pour la création de ces emplois et la pile a atteint plus de 1000 emplois. J'ai corrigé le problème qui entraînait la mise en file d'attente de nombreux travaux. Le problème que j'ai maintenant est que les travaux créés par le bogue sont toujours présents. Il est donc difficile de tester quelque chose puisqu'un travail est ajouté à une file d'attente comptant plus de 1000 travaux. Je n'arrive pas à arrêter ces emplois. J'ai essayé de supprimer la file d'attente de redis-cli à l'aide de la commande flushall mais cela n'a pas fonctionné. Est-ce que je manque quelque chose? parce que je n'arrive pas à trouver un moyen de me débarrasser de ces emplois.

36
Kibet Yegon

Si vous ouvrez une console Rails, vous pouvez exécuter ce code pour effacer vos files d'attente:

queue_name = "my_queue"
Resque.redis.del "queue:#{queue_name}"
47
Dylan Markow

En jouant avec les réponses ci-dessus, si vous devez effacer toutes vos files d'attente, vous pouvez utiliser les éléments suivants:

Resque.queues.each{|q| Resque.redis.del "queue:#{q}" }
60
shedd

Resque a déjà une méthode pour cela: essayez Resque.remove_queue(queue_name) (voir la documentation ici ). En interne, il exécute Resque.redis.del(), mais il effectue également d'autres opérations de nettoyage. En utilisant une méthode api (plutôt que de faire des suppositions sur le fonctionnement de resque), vous serez plus sûr de l'avenir.

35
iainbeeston

Tâche de rake mise à jour pour effacer (en fonction des dernières modifications apportées aux commandes redis): https://Gist.github.com/1228863

14
denmarkin

C'est ce qui fonctionne maintenant:

Resque.remove_queue("...")
13
vladCovaliov

Entrez redis console:

redis-cli

Liste des bases de données:

127.0.0.1:6379> KEYS *
 1) "resque:schedules_changed"
 2) "resque:workers"
 3) "resque:queue:your_overloaded_queue"

"resque:queue:your_overloaded_queue" - db dont vous avez besoin.

Puis lancez:

DEL resque:queue:your_overloaded_queue

Ou si vous souhaitez supprimer des travaux spécifiés dans la file d'attente, répertoriez quelques valeurs de la base de données avec LRANGE command:

127.0.0.1:6379> LRANGE resque:queue:your_overloaded_queue 0 2
1) "{\"class\":\"AppClass\",\"args\":[]}"
2) "{\"class\":\"AppClass\",\"args\":[]}"
3) "{\"class\":\"AppClass\",\"args\":[]}"

Ensuite, copiez/collez une valeur dans LREM command:

127.0.0.1:6379> LREM resque:queue:your_overloaded_queue 5 "{\"class\":\"AppClass\",\"args\":[]}"
(integer) 5

Où 5 - nombre d'éléments à supprimer.

4
hlcs

Utiliser l'API Resque plutôt que de tout supprimer sur Redis de Resque est plus sûr et plus sûr. Resque fait quelques travaux de nettoyage à l'intérieur. 

Si vous souhaitez supprimer toutes les files d'attente et les tâches associées associées:

Resque.queues.each {|queue| Resque.remove_queue(queue)}

Les files d'attente seront recréées lors de la prochaine mise en file d'attente d'un travail. 

Documentation

0
Erowlin