Ich bin es gewohnt, mit der Methode delay_jobs in die Konsole zu gehen, um zu sehen, was sich in der Warteschlange befindet, und die Warteschlange bei Bedarf einfach zu löschen. Gibt es dafür ähnliche Befehle in Sidekiq? Vielen Dank!
ruby-on-rails
sidekiq
Ausdauer
quelle
quelle
Antworten:
Ich habe Sidekiq noch nie verwendet, daher gibt es möglicherweise Methoden zum Anzeigen der Jobs in der Warteschlange, aber es handelt sich eigentlich nur um Wrapper um Redis-Befehle, da dies im Grunde alles ist, was Sidekiq (und Resque) ist:
Leider ist das Entfernen eines bestimmten Jobs etwas schwieriger, da Sie den genauen Wert kopieren müssten:
All dies können Sie noch einfacher tun über
redis-cli
:quelle
Sidekiq::Client.registered_queues
wurde durchSidekiq::Queue.all
undSidekiq::Client.registered_workers
mit ersetztSidekiq::Workers.new
, siehe: github.com/mperham/sidekiq/blob/…Es gibt eine ergonomische API zum Anzeigen und Verwalten von Warteschlangen .
Es ist standardmäßig nicht erforderlich.
Hier ist der Auszug:
Sie können auch einige zusammenfassende Statistiken erhalten.
quelle
wenn es einen geplanten Job gibt. Sie können alle Jobs mit dem folgenden Befehl löschen:
Wenn Warteschlangen vorhanden sind, in denen Sie alle Jobs löschen möchten, können Sie den folgenden Befehl verwenden:
Wiederholungsjobs können auch mit dem folgenden Befehl entfernt werden:
Weitere Informationen finden Sie hier unter folgendem Link: https://github.com/mperham/sidekiq/wiki/API
quelle
Es gibt eine API für den Zugriff auf Echtzeitinformationen zu Arbeitnehmern, Warteschlangen und Jobs.
Besuchen Sie hier https://github.com/mperham/sidekiq/wiki/API
quelle
Eine Problemumgehung besteht darin, das Testmodul zu verwenden ('sidekiq / testing' erforderlich) und den Worker zu entleeren (MyWorker.drain).
quelle
In der Standardwarteschlange waren "Arbeiter" gehängt, und ich konnte sie über die Weboberfläche sehen. Sie waren jedoch nicht über die Konsole verfügbar, wenn ich Sidekiq :: Queue.new.size verwendet habe
Mit redis-cli konnte ich sie finden
Die Lösung war:
Auch in Sidekiq v3 gibt es einen Befehl
Aber aus irgendeinem Grund hat es an diesem Tag bei mir nicht funktioniert
quelle
Und wenn Sie die Sidekiq-Wiederholungswarteschlange löschen möchten, ist dies:
Sidekiq::RetrySet.new.clear
quelle
quelle
keys *
in der Produktion, es sei denn, Sie verwenden diese Redis nur für Sidekiq. Führen Sie es insbesondere nicht aus, wenn Sie über große Datenmengen (Cache usw.) verfügen. Redis ist Single-Threaded undkeys *
blockiert - dies kann bei großen Datenmengen (mehrere Gbs) zu Ausfallzeiten von mehreren Minuten führen.Rechenaufgabe zum Löschen aller Sidekiq-Warteschlangen:
Verwendung:
quelle