Der Laravel Queue Service bietet eine einheitliche API für verschiedene Hintergrundwarteschlangen. In diesem Artikel werden Ihnen hauptsächlich die grundlegendsten Bedienungs-Tutorials zur Verwendung von Queue in Laravel vorgestellt. Ich hoffe, es hilft allen.
Vorwort
Der Warteschlangendienst in Laravel unterscheidet sich nicht von anderen Warteschlangendiensten. Sie sind die einfachsten und am häufigsten verwendeten Der Prozess entspricht dem menschlichen Denken: Es gibt einen Ort zum Speichern von Warteschlangeninformationen, ein PHP-Prozess schreibt Aufgaben, wenn er ausgeführt wird, und ein anderer PHP-Daemon-Prozess fragt die Warteschlangeninformationen ab, führt Aufgaben aus und löscht sie, die die Ausführungsanforderungen erfüllen. Da PHP eine URL-gesteuerte synchrone Sprache ist und von Natur aus blockiert, ist es nicht verwunderlich, dass Laravel ein Daemon-Tool zum Abfragen und Ausführen von Warteschlangeninformationen bereitstellt.
Es war das erste Mal in den letzten zwei Tagen, dass ich mit der Warteschlange von Laravel in Kontakt kam, und es hat lange gedauert. . . Nach all der harten Arbeit habe ich immer noch das Gefühl, dass ich nicht weiß, wie man Laravel verwendet. Die Dokumentation ist relativ einfach und zusammengefasst, und es ist etwas schwierig, den Quellcode zu lesen (aber den Quellcode zu lesen und ihn langsam zu debuggen und zu überprüfen). ist immer noch die zuverlässigste).
Das Folgende ist eine einfache Demo von mir, die nur die grundlegendsten Vorgänge der Warteschlange verwendet. Fortgeschrittenere Vorgänge erfordern mehr Zeit:)
Wie bei mir gibt es einige Warteschlangen für den Einstieg mit Laravel. Schüler, die in Schwierigkeiten sind, können miteinander kommunizieren.
Konfiguration
Redis-Paket hinzufügen
in Composer.json Fügen Sie „predis/predis“: „~1.0“ zum Abschnitt „require“ hinzu und erstellen Sie dann einen Composer, um ihn zu aktualisieren.
database.php
Konfigurieren Sie den Redis-Datenbankteil in der Datenbank.php-Konfigurationsdatei. Standardmäßig gibt es eine Standardverbindung, verwenden Sie einfach diese: )
Bearbeiten Sie entsprechend den in dieser Standardverbindung erforderlichen Konfigurationselementen die .env-Konfigurationsdatei und geben Sie REDIS_HOST, REDIS_PASSWORD und REDIS_PORT mit den entsprechenden Werten von Redis auf Ihrem eigenen Server ein.
queue.php
Zuerst müssen Sie QUEUE_DRIVER in .env konfigurieren. Da Sie jetzt Redis verwenden möchten, konfigurieren Sie es für Redis.
Konfigurieren Sie dann die Redis-Verbindung im Abschnitt „Verbindungen“ von queue.php, wobei der entsprechende Wert von „connection“ die Standardverbindung von Redis in „database.php“ ist.
Aufgabenklasse
Der nächste Schritt besteht darin, die eigentliche Operationsklasse zu schreiben, um die Erstellung zu vereinfachen Aufgabenklassen:
php artisan make:job Demo
Das Jobs-Verzeichnis wird im App-Verzeichnis generiert, das bereits über die Aufgabenklasse Demo.php verfügt.
Lumen verfügt nicht über diesen handwerklichen Befehl, aber er ist sehr praktisch. Standardmäßig ist bereits eine BeispielJob.php geschrieben. Kopieren Sie sie einfach und ändern Sie den Namen.
Schreiben Sie zunächst einen einfachen Protokollausgabetest in der Handle-Methode:
Log::info('Hello, queue');
Aufgaben ausgeben
Jetzt schreiben eine Eingabefunktion, um die Aufgabe in die Warteschlange zu verschieben. Verwenden Sie die Hilfsfunktion „dispatch()“:
Verwenden Sie die folgende Methode in Laravel:
Demo::dispatch();
Verwenden Sie die folgende Methode in Lumen:
dispatch(new Demo);
Offene Warteschlange
Wenn alles gut geht, ist dies der letzte Schritt. In der Befehlszeile ausführen:
php artisan queue:listen --queue=default
Es überwacht die Warteschlange und gibt einen einfachen Ausführungsstatus aus, z. B.:
[2017-11-07 02:12:47] Processing: App\Jobs\Demo [2017-11-07 02:12:47] Processed: App\Jobs\Demo
Wenn kein Problem vorliegt, können Sie dieses Warteschlangenskript verwenden im Hintergrund ausführen:
php artisan queue:work --daemon --quiet --queue=default 1>> /dev/null 2>&1
Erweitert:)
Beim Pushen in die Warteschlange müssen normalerweise Parameter übergeben werden. Wie werden sie hier übergeben? ?
Parameterübergabe
Übergabe
Die Methode zur Übergabe von Parametern in der Eingabefunktion ist wie folgt:
Die folgende Methode wird in Laravel verwendet:
$param = 'Stephen'; Demo::dispatch($param);
Die folgende Methode wird in Lumen verwendet:
$param = 'Stephen'; dispatch(new Demo($param));
Receive
Die Methode zum Empfangen von Parametern in der Task-Klasse ist wie folgt:
protected $param; /** * Create a new job instance. * * @return void */ public function __construct($param) { $this->param = $param; } /** * Execute the job. * * @return void */ public function handle() { Log::info('Hello, ' . $this->param); }
Dies ist der erste Versuch. Es gibt viele erweiterte Verwendungen, wie z. B. verzögerte Verteilung und Fehlerbehandlung , Priorität, Fehlerbehandlung usw., die in Zukunft fortgesetzt werden :)
Mehrere Warteschlangen
Das ist Ein Problem, das berücksichtigt werden muss. Es ist für mich unmöglich, alle Aufgaben in eine Warteschlange namens „Standard“ zu stellen. Es ist nicht einfach, die Warteschlange zu verwalten.
Um verschiedene Warteschlangen anzugeben, ist es sehr einfach, direkt nach der Funktion „dispatch()“ die Methode onQueue() zu befolgen:
Demo::dispatch()->onQueue('emails');
Nein, diesen Namen habe ich anscheinend nicht definiert . Warteschlange mit E-Mails. Nun, natürlich müssen wir einige Änderungen an der Redis-Konfigurationswarteschlange in der Konfigurationsdatei queue.php vornehmen. Dies hat zur Folge, dass der Name der Warteschlange während der Laufzeit dynamisch abgerufen werden kann hartcodiert.
Wenn Sie das Lumen-Framework verwenden, erhalten Sie eine Fehlermeldung, wenn Sie es direkt schreiben: Call to a member function onQueue() on string.
Der Grund dafür ist, dass die Job-Basisklasse von Lumen nicht das Merkmal IlluminateFoundationBusDispatchable verwendet, sondern direkt die Methode onQueue() in IlluminateBusQueueable.
Jetzt ist klar, dass unsere Job-Klasse das Merkmal IlluminateBusQueueable verwendet, also müssen wir diese onQueue()-Methode für die Job-Klasse aufrufen.
$job = new XXXJob(); dispatch($job->onQueue('queue-name'));
Wenn wir die Warteschlange öffnen:
php artisan queue:work --queue=emails
这里指定的队列名 emails 和 dispatch 时指定的队列名保持一致即可。
相关推荐:
Das obige ist der detaillierte Inhalt vonDie Verwendung von Queue in Laravel. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!