Heim Backend-Entwicklung PHP-Tutorial Die Verwendung von Queue in Laravel

Die Verwendung von Queue in Laravel

May 25, 2018 pm 01:48 PM
laravel queue 使用

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!

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

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Laravel – Handwerkerbefehle Laravel – Handwerkerbefehle Aug 27, 2024 am 10:51 AM

Laravel – Artisan Commands – Laravel 5.7 bietet eine neue Möglichkeit, neue Befehle zu behandeln und zu testen. Es enthält eine neue Funktion zum Testen von Handwerkerbefehlen und die Demonstration wird unten erwähnt?

Laravel – Paginierungsanpassungen Laravel – Paginierungsanpassungen Aug 27, 2024 am 10:51 AM

Laravel – Paginierungsanpassungen – Laravel enthält eine Paginierungsfunktion, die einem Benutzer oder Entwickler hilft, eine Paginierungsfunktion einzubinden. Der Laravel-Paginator ist in den Abfrage-Builder und Eloquent ORM integriert. Die Paginierungsmethode automatisch

Wie bekomme ich den Rückgabecode, wenn das Senden von E -Mails in Laravel fehlschlägt? Wie bekomme ich den Rückgabecode, wenn das Senden von E -Mails in Laravel fehlschlägt? Apr 01, 2025 pm 02:45 PM

Methode zum Abholen des Rücksendecode, wenn das Senden von Laravel -E -Mails fehlschlägt. Wenn Sie Laravel zur Entwicklung von Anwendungen verwenden, stellen Sie häufig Situationen auf, in denen Sie Überprüfungscodes senden müssen. Und in Wirklichkeit ...

Laravel -Zeitplanaufgabe wird nicht ausgeführt: Was soll ich tun, wenn die Aufgabe nicht nach Zeitplan ausgeführt wird: Befehl ausführen? Laravel -Zeitplanaufgabe wird nicht ausgeführt: Was soll ich tun, wenn die Aufgabe nicht nach Zeitplan ausgeführt wird: Befehl ausführen? Mar 31, 2025 pm 11:24 PM

Laravel -Zeitplan -Aufgabe Ausführen nicht reagierende Fehlerbehebung Bei Verwendung der Zeitplanung von Laravel -Zeitplänen werden viele Entwickler auf dieses Problem stoßen: Zeitplan: Run ...

Wie kann man in Laravel mit der Situation umgehen, in der Überprüfungscodes nicht per E -Mail gesendet werden? Wie kann man in Laravel mit der Situation umgehen, in der Überprüfungscodes nicht per E -Mail gesendet werden? Mar 31, 2025 pm 11:48 PM

Die Methode zum Umgang mit Laravels E -Mail -Versagen zum Senden von Verifizierungscode besteht darin, Laravel zu verwenden ...

So implementieren Sie die benutzerdefinierte Tabellenfunktion des Klickens, um Daten im DCAT -Administrator hinzuzufügen? So implementieren Sie die benutzerdefinierte Tabellenfunktion des Klickens, um Daten im DCAT -Administrator hinzuzufügen? Apr 01, 2025 am 07:09 AM

So implementieren Sie die Tabellenfunktion von benutzerdefiniertem Klicken, um Daten in dcatadmin (laravel-admin) hinzuzufügen, wenn Sie DCAT verwenden ...

Laravel – Dump-Server Laravel – Dump-Server Aug 27, 2024 am 10:51 AM

Laravel – Dump-Server – Der Laravel-Dump-Server wird mit der Version von Laravel 5.7 geliefert. Die Vorgängerversionen enthalten keinen Dump-Server. Der Dump-Server wird eine Entwicklungsabhängigkeit in der Laravel-/Laravel-Composer-Datei sein.

Laravel Redis -Verbindungsfreigabe: Warum wirkt sich die Auswahlmethode auf andere Verbindungen aus? Laravel Redis -Verbindungsfreigabe: Warum wirkt sich die Auswahlmethode auf andere Verbindungen aus? Apr 01, 2025 am 07:45 AM

Die Auswirkungen des Austauschs von Redis -Verbindungen im Laravel -Framework und der Auswahl von Methoden bei Verwendung von Laravel -Framework und Redis können Entwickler auf ein Problem stoßen: Durch Konfiguration ...

See all articles