Wie kann man Arbeitsplätze zerstören, die von Rettungskräften in die Warteschlange gestellt wurden?

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

Frage

Ich verwende Resque für ein Rails-3-Projekt, um Jobs zu verarbeiten, die alle 5 Minuten ausgeführt werden sollen.Ich habe kürzlich etwas getan, das die Schaffung dieser Jobs beschleunigt hat, und der Stapel hat über 1000 Jobs getroffen.Ich habe das Problem behoben, das dazu führte, dass so viele Jobs in die Warteschlange gestellt wurden, und jetzt habe ich das Problem, dass die durch den Fehler erstellten Jobs immer noch vorhanden sind. Daher wird es schwierig, etwas zu testen, da ein Job zu einer Warteschlange mit mehr als 1000 Jobs hinzugefügt wird. Ich kann diese Jobs nicht aufhalten.Ich habe versucht, die Warteschlange mit dem Befehl flushall aus der redis-cli zu entfernen, aber es hat nicht funktioniert.Vermisse ich etwasWeil ich anscheinend keinen Weg finde, diese Jobs loszuwerden.

War es hilfreich?

Lösung

Wenn Sie eine Rails-Konsole öffnen, können Sie diesen Code ausführen, um Ihre Warteschlange (n) zu löschen:

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

Andere Tipps

Wenn Sie die obigen Antworten ausspielen und alle Warteschlangen löschen müssen, können Sie Folgendes verwenden:

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

Resque hat bereits eine Methode, um dies zu tun - versuchen Sie es mit Resque.remove_queue(queue_name) (siehe die Dokumentation hier ).Intern führt es Resque.redis.del() durch, führt aber auch andere Bereinigungen durch. Wenn Sie eine API-Methode verwenden (anstatt Annahmen darüber zu treffen, wie Resque funktioniert), sind Sie zukunftssicherer.

Aktualisierte Rake-Task zum Löschen (gemäß den letzten Änderungen der Redis-Befehle): https://gist.github.com/1228863

Das funktioniert jetzt:

Resque.remove_queue("...")

Geben Sie die Redis-Konsole ein:

redis-cli

Datenbanken auflisten:

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

"resque:queue:your_overloaded_queue" - Datenbank, die Sie benötigen.

Führen Sie dann Folgendes aus:

DEL resque:queue:your_overloaded_queue

Wenn Sie bestimmte Jobs in der Warteschlange löschen möchten, listen Sie mit dem Befehl LRANGE einige Werte aus der Datenbank auf:

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\":[]}"

Kopieren Sie anschließend einen Wert in den Befehl LREM :

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

Wobei 5 - Anzahl der zu entfernenden Elemente.

Es ist sicherer und kugelsicherer, die Resque-API zu verwenden, als alles auf den Redis des Resque zu löschen.Resque reinigt das Innere.

Wenn Sie alle Warteschlangen und zugehörige in die Warteschlange gestellte Jobs entfernen möchten:

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

Die Warteschlangen werden beim nächsten Einreihen eines Jobs neu erstellt.

Dokumentation

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top