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?

WBOY
Freigeben: 2023-06-13 14:23:36
Original
1321 Leute haben es durchsucht

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,

        ],

    ],

],
Nach dem Login kopieren

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

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

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

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:

  1. Installieren Sie Supervisor (bitte beachten Sie die Verwendung von Supervisor).
  2. Erstellen Sie eine neue Datei queue-worker.conf im Verzeichnis /etc/supervisor/conf.d.
  3. Geben Sie den folgenden Code ein:
[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
Nach dem Login kopieren

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!

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