Ich richte meinen Offline-Jobserver ein. Ich habe die Dokumentation gelesen, sehe aber immer noch nicht die Unterschiede zwischen den beiden Befehlen: artisan queue:work --daemon
und artisan queue:listen
. Welchen Befehl soll ich zum Ausführen meiner Daemons verwenden?
Geändert am 07.04.2017 bearbeiten:
Es gibt jetzt drei Möglichkeiten, Ihre Warteschlange auszuführen:
queue:work
- Dies ist der neue "Daemon" -Prozess (das Flag wird nicht mehr benötigt). Das Framework wird "einmal" gestartet und durchläuft dann die Jobs in einer Schleife. Dies wird auf unbestimmte Zeit fortgesetzt. Es verbraucht weniger Speicher/CPU als queue:listen
, Da das Framework die ganze Zeit aktiv bleibt. Sie müssen auch daran denken, queue:restart
Zu verwenden, um die Warteschlange zu zwingen, alle Codeänderungen zu aktualisieren, die Sie während des Patchens übertragen.
queue:work --once
- Dadurch wird das Framework gestartet, ein Job verarbeitet und dann heruntergefahren. Nützlich zum Testen während der Entwicklung usw.
queue:listen
- Hiermit wird das Framework in jedem Zyklus gestartet, ein Job verarbeitet, dann vollständig heruntergefahren und das Framework erneut gestartet usw. und eine Endlosschleife ausgeführt. Dies bedeutet, dass alle Speicher/Prozesse freigegeben werden, nachdem jeder Auftrag verarbeitet wurde. Wenn Sie Speicherverluste mit queue:work
Haben, probieren Sie dies aus.
Das Flag --daemon
Wirkt sich nicht mehr auf diese Befehle aus.
rsprüngliche Antwort:
Es sind zwei verschiedene Probleme aufgeführt.
Es gibt artisan queue:work
Und artisan queue:listen
queue:work
Löscht einfach den nächsten Auftrag in der Warteschlange und verarbeitet nur diesen einen Auftrag. Dies ist ein "One Off" -Befehl, der zur Eingabeaufforderung zurückkehrt, sobald der One Queue-Befehl verarbeitet wurde.queue:listen
Hört die Warteschlange ab und verarbeitet alle empfangenen Warteschlangenbefehle weiter. Dies wird so lange ausgeführt, bis Sie es beenden.In Laravel> = 4.2 wurde ein --daemon
- Befehl hinzugefügt. Die Arbeitsweise besteht einfach darin, die Warteschlangen direkt auszuführen, anstatt das gesamte Framework neu zu starten, nachdem jede Warteschlange verarbeitet wurde. Dies ist ein optionaler Befehl, der die Speicher- und CPU-Anforderungen Ihrer Warteschlange erheblich reduziert .
Der wichtige Punkt beim Befehl --daemon
Ist, dass Sie beim Aktualisieren Ihrer Anwendung Ihre Warteschlange mit queue:restart
Neu starten müssen, da sonst möglicherweise alle möglichen seltsamen Fehler auftreten können, wie dies bei Ihrer Warteschlange der Fall wäre habe den alten Code im Speicher.
Zur Beantwortung Ihrer Frage " Welchen Befehl soll ich zum Ausführen meiner Daemons verwenden? " lautet die Antwort fast immer queue:work --daemon
Dinge wurden geändert aber es wurde nicht in dem Dokument erwähnt
--daemon Run the worker in daemon mode (Deprecated)
jetzt standardmäßig php artisan queue:work
läuft im Daemon-Modus,
so queue:work
Verarbeiten Sie die Jobs weiter, ohne das Framework neu zu starten
für den einmaligen Befehl ist,
php artisan queue:work --once
Der wichtigste Unterschied ist, dass queue:work --daemon
startet das Framework nicht bei jedem Job neu, sondern queue:listen
tut. Tatsächlich startet listen
für jeden Job einen völlig neuen Laravel) -Prozess.
Versuchen Sie es selbst: Öffnen Sie 2 Terminals und führen Sie work --daemon
in der einen und listen
in der anderen. Das Fenster work
führt Aufträge viel schneller aus als listen
.
Ab Laravel 5.7 wurde eine neue Option --stop-when-empty
Zum Befehl queue:work
Hinzugefügt. Bei Verwendung dieser Option wird die aktuelle Warteschlange verarbeitet, bis sie leer ist Der Befehl wird beendet.
Nach der Dokumentation :
Die Option --stop-when-empty kann verwendet werden, um den Worker anzuweisen, alle Jobs zu verarbeiten und anschließend ordnungsgemäß zu beenden. Diese Option kann nützlich sein, wenn Sie Laravel Warteschlangen in einem Docker-Container bearbeiten, wenn Sie den Container herunterfahren möchten, nachdem die Warteschlange leer ist:
php artisan queue:work --stop-when-empty