Heim  >  Artikel  >  PHP-Framework  >  Laravel-Entwicklung: Wie verwaltet man asynchrone Aufgaben mit Laravel Queues und Supervisor?

Laravel-Entwicklung: Wie verwaltet man asynchrone Aufgaben mit Laravel Queues und Supervisor?

王林
王林Original
2023-06-13 16:04:16892Durchsuche

Laravel-Entwicklung: Wie verwende ich Laravel-Warteschlangen und Supervisor, um asynchrone Aufgaben zu verwalten?

In modernen Webanwendungen sind asynchrone Aufgaben zu einem festen Bestandteil des Tagesgeschäfts geworden. Asynchrone Aufgaben können die Reaktionszeit von Anwendungen verbessern, die Benutzererfahrung optimieren und die Skalierbarkeit von Anwendungen verbessern. Laravel Queues ist ein leistungsstarkes Tool, das vom Laravel-Framework zur Bearbeitung asynchroner Aufgaben und Nachrichtenwarteschlangen bereitgestellt wird. In diesem Artikel werden das Konzept und die Verwendung von Laravel-Warteschlangen vorgestellt und mit Supervisor kombiniert, um asynchrone Aufgaben zu verwalten.

Was sind Laravel-Warteschlangen?

Laravel Queues ist eine Methode zur Handhabung asynchroner Aufgaben und Nachrichtenwarteschlangen. Mit Laravel-Warteschlangen können Sie zeitaufwändige Aufgaben in eine Warteschlange stellen, ohne die Antwortzeit Ihrer Webanfragen zu beeinträchtigen. Das Versenden einer E-Mail, das Verarbeiten eines Videos oder das Erstellen einer PDF-Datei sind beispielsweise alles zeitaufwändige Vorgänge, und die Verwendung einer Warteschlange, um sie in die Hintergrundverarbeitung zu stellen, kann Ihre Anwendung effizienter und reaktionsschneller machen.

Laravel Queues unterstützt über einige integrierte Warteschlangentreiber mehrere Backend-Technologien wie Datenbank, Redis, Beanstalkd und Amazon SQS. Dadurch können Entwickler ihre bevorzugte Warteschlangentechnologie zur Bearbeitung asynchroner Aufgaben verwenden.

Verwendung von Laravel-Warteschlangen

Im Folgenden stellen wir Ihnen Schritt für Schritt vor, wie Sie Laravel-Warteschlangen zur Bearbeitung asynchroner Aufgaben verwenden.

Schritt eins: Warteschlangentreiber konfigurieren

In der Laravel-Konfigurationsdatei gibt es eine Datei namens queue.php, die Sie zum Konfigurieren von Warteschlangen und Warteschlangentreibern verwenden können. Sie können die Datei queue.php mit dem folgenden Befehl generieren:

php artisan queue:table
php artisan queue:failed-table
php artisan migrate

Dadurch werden die Migrationsdatei und die Warteschlangentabelle generiert. Führen Sie den Migrationsbefehl aus, um die Migration durchzuführen.

In der Datei queue.php haben Sie die Möglichkeit, mehrere Warteschlangentreiber zu verwenden:

  • Datenbanktreiber – Speichert Aufgaben in einer Datenbank und kann als Warteschlangensystem der Einstiegsklasse verwendet werden.
  • Redis-Treiber – Nutzen Sie die integrierte Warteschlangenunterstützung von Redis.
  • Beanstalkd-Treiber – Verwendet den Beanstalkd-Nachrichtenwarteschlangendienst.
  • Amazon SQS-Treiber – Verwendet Amazon Simple Queue Service (SQS).

Wenn Sie beispielsweise den Redis-Warteschlangentreiber verwenden möchten, konfigurieren Sie bitte die Datei queue.php wie folgt:

'default' => env('QUEUE_CONNECTION', 'redis'),
'connections' => [
    'redis' => [
        'driver' => 'redis',
        'connection' => 'default',
        'queue' => env('REDIS_QUEUE', 'default'),
        'retry_after' => 90,
        'block_for' => null,
    ],
]

Schritt 2: Erstellen Sie eine Warteschlangenaufgabenklasse

Als nächstes müssen Sie eine Warteschlangenaufgabenklasse erstellen Verarbeitung asynchroner Aufgaben. Diese Klasse sollte eine einfache PHP-Klasse sein, die die Logik der Aufgabe definiert. Der folgende Code ist beispielsweise eine asynchrone Task-Klasse zum Senden von E-Mails:

class SendEmail implements ShouldQueue
{
    use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;

    protected $email;
    /**
     * Create a new job instance.
     *
     * @return void
     */
    public function __construct($email)
    {
        $this->email = $email;
    }
    /**
     * Execute the job.
     *
     * @return void
     */
    public function handle()
    {
        Mail::to($this->email)->send(new WelcomeEmail());
    }
}

Diese Klasse implementiert die ShouldQueue-Schnittstelle, die erforderlich ist, um Laravel anzuweisen, diese Klasse in eine asynchrone Task-Klasse umzuwandeln. Die Methode handle() definiert die spezifische Logik der Aufgabe, sodass die Aufgaben, die Sie asynchron verarbeiten müssen, hier ausgeführt werden können.

Schritt 3: Aufgabe in die Warteschlange verschieben

Da Sie nun Ihre Warteschlangenaufgabe und den Warteschlangentreiber bereit haben, besteht der nächste Schritt darin, die Aufgabe in die Warteschlange zu stellen. Verwenden Sie den folgenden Code, um an einer beliebigen Stelle in Ihrem Projekt eine Eloquent-Warteschlange aufzurufen:

use AppJobsSendEmail; 
use IlluminateSupportFacadesQueue;
...
Queue::push(new SendEmail('example@test.com'));

Oder Sie können die Methode „dispatch()“ verwenden, um eine Aufgabe wie folgt in die Warteschlange zu stellen:

SendEmail::dispatch('example@test.com');

Schritt 4: Führen Sie die Warteschlangenaufgabe aus

Sobald Sie Stellen Sie die Aufgabe in die Warteschlange. Die Aufgabe wird an die Warteschlange weitergeleitet und wartet auf ihre Ausführung. Sie können den folgenden Code verwenden, um die Warteschlange auszuführen:

php artisan queue:work

Durch die Ausführung dieses Befehls wird ein Listener gestartet und die Aufgaben in der Warteschlange verarbeitet.

Verwenden Sie Supervisor, um asynchrone Aufgaben zu verwalten

Da Warteschlangenaufgaben im Hintergrund ausgeführt werden müssen, muss ein Prozessdämon auf dem Server eingerichtet werden, um sicherzustellen, dass Aufgaben weiterhin ausgeführt werden können. Supervisor ist ein häufig verwendeter Prozessdämon, der sicherstellt, dass Hintergrundprozesse nicht abnormal beendet werden, und sie bei Bedarf neu startet.

Schritt 1: Supervisor installieren

Im Ubuntu-System können Sie den folgenden Befehl verwenden, um Supervisor zu installieren:

sudo apt-get update
sudo apt-get install supervisor

Schritt 2: Erstellen Sie eine Supervisor-Konfigurationsdatei

Erstellen Sie sie im Verzeichnis /etc/supervisor/conf.d A B. myqueue.conf:

nano /etc/supervisor/conf.d/myqueue.conf

Fügen Sie Folgendes zur Konfigurationsdatei hinzu und stellen Sie sicher, dass Sie den Pfad, den Befehl und den Benutzernamen so ändern, dass sie zu Ihrem Programm passen:

[program:myqueue]
process_name=%(program_name)s_%(process_num)02d
command=/usr/bin/php /path/to/artisan queue:work --sleep=3 --tries=3 --daemon
autostart=true
autorestart=true
user=username
numprocs=1
redirect_stderr=true
stdout_logfile=/path/to/storage/logs/myqueue.log

Schritt drei: Supervisor neu laden

Nachdem Sie Änderungen vorgenommen haben Wenn Sie die Konfigurationsdatei des Supervisors laden, müssen Sie den Supervisor benachrichtigen, damit er die Konfigurationsdatei neu laden kann. Verwenden Sie den folgenden Befehl, um den Supervisor neu zu laden:

sudo supervisorctl reread

sudo supervisorctl update

sudo supervisorctl start all

Schritt 4: Supervisor-Protokoll anzeigen

Sie können die Ausgabe- und Fehlerinformationen der asynchronen Aufgabe in der Protokolldatei des Supervisors anzeigen. Sie können beispielsweise das Supervisor-Protokoll anzeigen, indem Sie den in der Konfigurationsdatei angegebenen Pfad und Protokolldateinamen anzeigen:

tail -f /path/to/storage/logs/myqueue.log

Fazit

In diesem Artikel wird erläutert, wie Sie mit Laravel Queues und Supervisor asynchrone Aufgaben verwalten können zeitaufwändige Aufgaben Aufgaben werden in eine Warteschlange gestellt und machen die Anwendung effizienter und reaktionsschneller. Verwenden Sie Supervisor, um sicherzustellen, dass Hintergrundaufgaben weiterhin ausgeführt und bei Bedarf automatisch neu gestartet werden können. Ich hoffe, dass dieser Artikel für Ihre Entwicklung hilfreich sein wird.

Das obige ist der detaillierte Inhalt vonLaravel-Entwicklung: Wie verwaltet man asynchrone Aufgaben mit Laravel Queues und Supervisor?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
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