Heim >PHP-Framework >Laravel >Laravel-Entwicklung: Wie verwende ich Laravel-Warteschlangen zur Bearbeitung asynchroner Aufgaben?
Laravel-Entwicklung: Wie verwende ich Laravel-Warteschlangen zur Bearbeitung asynchroner Aufgaben?
Laravel ist ein beliebtes PHP-Framework, dessen leistungsstarke Funktionen es zur besten Wahl für die Entwicklung von Webanwendungen machen. Mit Laravel können Sie schnell und einfach komplexe Webanwendungen erstellen. In diesem Artikel besprechen wir die Verwendung von Laravel Queues, einer Funktion, die bei der Bearbeitung asynchroner Aufgaben hilft.
Das Konzept asynchroner Aufgaben
Wenn ein Benutzer eine Aufgabe in einer Webanwendung ausführt, muss er oder sie warten, bis die Aufgabe abgeschlossen ist, bevor er das Ergebnis erhält. Dies ist die Synchronisierungsaufgabe. Was aber, wenn wir es verarbeiten möchten, ohne dass der Benutzer auf den Abschluss der Aufgabe warten muss? Dies ist eine asynchrone Aufgabe!
Asynchrone Aufgaben haben keinen Einfluss auf die Echtzeit-Antwortleistung des Benutzers, da sie nicht auf den Abschluss der Aufgabe warten, bevor sie Ergebnisse zurückgeben. Stattdessen werden diese Aufgaben in eine Warteschlange gestellt und einzeln im Hintergrund abgearbeitet. Beispielsweise lädt ein Benutzer eine Datei auf den Server hoch. Dauert ein Upload zu lange, weil die Datei zu groß ist, kann es sein, dass Nutzer ungeduldig werden und den Upload abbrechen. An dieser Stelle hilft die Verwendung asynchroner Aufgaben dabei, eine Abwanderung von Benutzern zu vermeiden.
Laravel-Warteschlangen sind Teil des Laravel-Frameworks, das bei der Bearbeitung asynchroner Aufgaben hilft.
Laravel-Warteschlangen erstellen
Der erste Schritt bei der Verwendung von Warteschlangen in Laravel besteht darin, dem Computer mitzuteilen, welche Warteschlange er bearbeiten soll. In der Datei Queue.php können Sie die Warteschlange definieren und angeben, welchen Treiber die Warteschlange verwendet. Treiber können lokale Treiber, Datenbanktreiber, Redis-Treiber, Beanstalk-Treiber usw. sein. Hier ist ein Beispiel:
'connection' => env('QUEUE_DRIVER', 'sync'), 'driver' => env('QUEUE_DRIVER', 'sync'), 'queue' => [ 'default' => [ 'connection' => 'default', 'queue' => 'default', 'retry_after' => 90, 'backoff' => [ 'strategy' => 'exponential', 'max_attempts' => 3, 'delay' => 1000, ], ], ],
Das obige Codebeispiel zeigt, dass die Warteschlange standardmäßig den „Sync“-Treiber verwendet. Sie können jedoch in der .env-Datei unterschiedliche Treiber definieren.
Warteschlange hinzufügen
Da wir nun die Warteschlange und ihren Treiber definiert haben, müssen Aufgaben zur Verarbeitung zur Warteschlange hinzugefügt werden. Im Laravel-Framework werden Aufgaben mithilfe der Methode „dispatch()“ zur Warteschlange hinzugefügt. Beispielsweise verwenden wir den folgenden Code, um eine Aufgabe zur Warteschlange hinzuzufügen:
ProcessPodcasts::dispatch($podcast);
Im obigen Code ist ProcessPodcasts die Aufgabe, die wir ausführen möchten, und $podcast ist der an die Aufgabe übergebene Parameter.
Aufgabe erstellen
Jetzt erstellen wir mit Laravel eine asynchrone Aufgabe. Dazu erstellen wir eine neue Job.php-Datei im Verzeichnis app/Jobs. Hier ist der Beispielcode:
<?php namespace AppJobs; use AppMailSendWelcomeEmail; use AppUser; use IlluminateBusQueueable; use IlluminateContractsQueueShouldQueue; use IlluminateFoundationBusDispatchable; use IlluminateQueueInteractsWithQueue; use IlluminateQueueSerializesModels; use IlluminateSupportFacadesMail; class SendWelcomeEmailJob implements ShouldQueue { // Traits used by the class use Dispatchable, InteractsWithQueue, Queueable, SerializesModels; protected $user; /** * Create a new job instance. * * @param User $user */ public function __construct(User $user) { $this->user = $user; } /** * Execute the job. * * @return void */ public function handle() { Mail::to($this->user->email)->send(new SendWelcomeEmail($this->user)); } }
Der obige Code erstellt eine asynchrone Aufgabe namens SendWelcomeEmailJob. Diese Aufgabe sendet eine E-Mail an einen neuen Benutzer. Da sich die Aufgabe in der Warteschlange befindet, muss der Benutzer nicht auf den Abschluss der E-Mail warten.
Ausführungswarteschlange
Mit den oben genannten Vorgängen haben wir eine Aufgabe erstellt und sie der Warteschlange hinzugefügt. Allerdings müssen wir die Aufgaben in der Warteschlange ausführen. Es gibt mehrere Möglichkeiten, eine Warteschlange auszuführen. Hier ist der Beispielcode:
php artisan queue:work
Im obigen Code führen wir die Warteschlange mit dem Befehl queue:work in der Laravel-CLI aus. Dieser Befehl wird so lange ausgeführt, bis keine weiteren Aufgaben mehr verarbeitet werden müssen.
Es gibt andere Möglichkeiten, Warteschlangen auszuführen, z. B. die Ausführung von Warteschlangen mit Hilfe des Supervisors. Supervisor ist ein Prozessmanagement-Tool, mit dem wir Laravel-Anwendungen im Hintergrund verwalten können. Um Warteschlangen mit Hilfe von Supervisor auszuführen, befolgen Sie diese Schritte:
[program:queue-worker] process_name=%(program_name)s_%(process_num)02d command=php /path/to/artisan queue:work autostart=true autorestart=true user=user numprocs=1 redirect_stderr=true stdout_logfile=/path/to/your/logs/queue-worker.log
Der obige Code erstellt einen Warteschlangenarbeiter für den Vorgesetzten. Wenn der Supervisor startet, beginnt dieses Programm mit der Verarbeitung der Warteschlange und wird im Hintergrund ausgeführt.
Fazit
In diesem Artikel haben wir gelernt, wie man Laravel Queues für die asynchrone Aufgabenverarbeitung verwendet. Wir haben das Konzept der Warteschlange kennengelernt und neue Warteschlangen und Treiber definiert. Wir haben auch eine asynchrone Aufgabe erstellt und gesehen, wie man sie mit Laravel Queues ausführt. Insgesamt sind Laravel-Warteschlangen eine sehr nützliche Komponente in der Laravel-Entwicklung, die uns helfen kann, asynchrone Aufgaben einfach zu bewältigen.
Das obige ist der detaillierte Inhalt vonLaravel-Entwicklung: Wie verwende ich Laravel-Warteschlangen zur Bearbeitung asynchroner Aufgaben?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!