Bearbeiten aktualisiert 2017-04-07:
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 dann die Jobs weiter durchlaufen. Dies wird auf unbestimmte Zeit fortgesetzt. Es verbraucht weniger Speicher / CPU als queue:listen
weil das Framework die ganze Zeit aktiv bleibt. Sie müssen auch daran denken, queue:restart
die Warteschlange zu verwenden, um 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
- Dadurch wird das Framework in jedem Zyklus gestartet, ein Job verarbeitet, dann vollständig heruntergefahren und dann das Framework erneut gestartet usw. und eine unbegrenzte Schleife ausgeführt. Dies bedeutet, dass alle Speicher / Prozesse nach der Verarbeitung jedes Jobs freigegeben werden. Wenn Sie Speicherlecks mit haben queue:work
- probieren Sie es aus.
Das --daemon
Flag wirkt sich nicht mehr auf diese Befehle aus.
Ursprüngliche Antwort:
Es sind zwei verschiedene Probleme aufgeführt.
Es gibt artisan queue:work
undartisan queue:listen
queue:work
wird einfach den nächsten Job in der Warteschlange entfernen und nur diesen einen Job verarbeiten. Dies ist ein einmaliger Befehl, der zur Verarbeitung der Eingabeaufforderung zurückkehrt, sobald der Befehl für eine Warteschlange verarbeitet wird.
queue:listen
hört die Warteschlange ab und verarbeitet weiterhin alle empfangenen Warteschlangenbefehle. Dies läuft unbegrenzt weiter, bis Sie es stoppen.
In Laravel> = 4.2 wurde ein --daemon
Befehl hinzugefügt. Die Funktionsweise 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 den Speicher- und CPU-Bedarf Ihrer Warteschlange erheblich reduziert.
Der wichtige Punkt mit dem --daemon
Befehl ist, dass Sie beim Aktualisieren Ihrer Anwendung Ihre Warteschlange speziell neu starten müssen queue:restart
, da sonst möglicherweise alle möglichen seltsamen Fehler auftreten können, da Ihre Warteschlange immer noch den alten Code im Speicher hat.
Um Ihre Frage " Welchen Befehl soll ich zum Ausführen meiner Dämonen verwenden? " Zu beantworten, lautet die Antwort fast immerqueue:work --daemon
Die Dinge wurden geändert, aber es wurde im Dokument nicht erwähnt
php artisan queue:work
läuft jetzt standardmäßig im Daemon-Modus,queue:work
Verarbeiten Sie also weiterhin Jobs, ohne das Framework jemals neu zu startenfür run it einmal Befehl ist,
php artisan queue:work --once
quelle
Der wichtigste Unterschied besteht darin , dass
queue:work --daemon
nicht den Rahmen für jedes nicht neu starten , Job , aberqueue:listen
tut . Tatsächlichlisten
wird für jeden Job ein ganz neuer Laravel-Prozess gestartet.Probieren Sie es aus: Öffnen Sie 2 Terminals und führen Sie das
work --daemon
eine undlisten
das andere aus. Daswork
Fenster führt Jobs viel schneller aus alslisten
.quelle
Ab Laravel 5.7 wurde
--stop-when-empty
demqueue:work
Befehl eine neue Option hinzugefügt . Wenn Sie diese Option verwenden, wird die aktuelle Warteschlange verarbeitet, bis sie leer ist. Anschließend wird der Befehl beendet.Laut Dokumentation :
php artisan queue:work --stop-when-empty
quelle