Die Verwendung von Queue in Laravel

*文
Freigeben: 2023-03-18 17:12:01
Original
3623 Leute haben es durchsucht

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
Nach dem Login kopieren

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');
Nach dem Login kopieren

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();
Nach dem Login kopieren

Verwenden Sie die folgende Methode in Lumen:

dispatch(new Demo);
Nach dem Login kopieren

Offene Warteschlange

Wenn alles gut geht, ist dies der letzte Schritt. In der Befehlszeile ausführen:

php artisan queue:listen --queue=default
Nach dem Login kopieren

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
Nach dem Login kopieren

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
Nach dem Login kopieren

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);
Nach dem Login kopieren

Die folgende Methode wird in Lumen verwendet:

$param = 'Stephen';
dispatch(new Demo($param));
Nach dem Login kopieren

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);
}
Nach dem Login kopieren

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');
Nach dem Login kopieren

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'));
Nach dem Login kopieren

Wenn wir die Warteschlange öffnen:

php artisan queue:work --queue=emails
Nach dem Login kopieren

这里指定的队列名 emails 和 dispatch 时指定的队列名保持一致即可。

相关推荐:

学习Laravel5的Eloquent 关系

laravel5.5控制器传参顺序问题及解决方案

Laravel 5.5的可相应接口如何使用?

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!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!