wake-up-neo.com

Was ist der Unterschied zwischen queue: work --daemon und queue: listen?

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?

62
Logan Bailey

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

115
Laurence

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

16
Alupotha

Der wichtigste Unterschied ist, dass queue:work --daemon startet das Framework nicht bei jedem Job neu, sondern queue:listentut. 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.

5
Simon Fredsted

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
0
PtrTon