Der Laravel-Warteschlangendienst bietet eine einheitliche API für verschiedene Hintergrundwarteschlangen. Der Artikel stellt Ihnen hauptsächlich das grundlegendste Bedienungs-Tutorial zur Verwendung von Warteschlangen in Laravel vor Als Referenz werfen wir einen Blick darauf.
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 der Warteschlangeninformationen, ein PHP-Prozess schreibt die Aufgaben, wenn er ausgeführt wird, und ein anderer PHP-Daemon-Prozess fragt die Warteschlangeninformationen ab, führt die 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 viel harter 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 langsam zu debuggen und zu überprüfen). es ist immer noch das zuverlässigste).
Das Folgende ist eine einfache Demo von mir, die nur die grundlegendsten Warteschlangenoperationen verwendet. Fortgeschrittenere Operationen erfordern mehr Zeit:)
Wie bei mir gibt es einige Warteschlangen für den Anfang 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
Schreiben Sie nun eine Eingabefunktion, um die Aufgabe in die Warteschlange zu verschieben. Verwenden Sie die Hilfsfunktion „dispatch()“:
Die folgende Methode wird in Laravel verwendet:
Demo::dispatch();
Die folgende Methode wird in Lumen verwendet:
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, wie zum Beispiel:
[2017-11-07 02:12:47] Processing: App\Jobs\Demo [2017-11-07 02:12:47] Processed: App\Jobs\Demo
Sobald es keine Probleme gibt, können Sie dieses Warteschlangenskript im Hintergrund ausführen lassen:
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 übergeben Sie sie hier?
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));
Empfangen
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, Fehlerbehandlung, Priorität, Fehlerbehandlung usw. Ich werde in Zukunft weiter schreiben :)
Mehrere Warteschlangen
Dies ist ein Problem, das berücksichtigt werden muss. Es ist für mich unmöglich, alle Aufgaben in eine Warteschlange zu stellen Dies wird als Standard bezeichnet, was die Verwaltung der Warteschlange erschwert.
Um verschiedene Warteschlangen anzugeben, ist es sehr einfach, direkt nach der Funktion „dispatch()“ die Methode onQueue() zu befolgen:
Demo::dispatch()->onQueue('emails');
Nein, Ich habe diese Warteschlange namens E-Mails anscheinend nicht definiert. 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 Folgendes direkt schreiben: Aufruf einer Mitgliedsfunktion onQueue() für einen String.
原因在于 Lumen 的 Job 基类中并没有使用 Illuminate\Foundation\Bus\Dispatchable 这个 trait,而是直接使用 Illuminate\Bus\Queueable 中的 onQueue() 方法。
那么现在就很清楚了,我们的 Job 类使用了 Illuminate\Bus\Queueable 这个 trait,所以需要在 Job 类上调用这个 onQueue() 方法。
$job = new XXXJob(); dispatch($job->onQueue('queue-name'));
当我们在开启队列的时候:
php artisan queue:work --queue=emails
这里指定的队列名 emails 和 dispatch 时指定的队列名保持一致即可。
总结
Das obige ist der detaillierte Inhalt vonTutorial zur grundlegendsten Bedienung der Queue in Laravel. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!