Heim  >  Artikel  >  PHP-Framework  >  Wie verwende ich Warteschlangen, um asynchrone Aufgaben in ThinkPHP6 zu implementieren?

Wie verwende ich Warteschlangen, um asynchrone Aufgaben in ThinkPHP6 zu implementieren?

PHPz
PHPzOriginal
2023-06-12 10:46:402937Durchsuche

Angesichts der kontinuierlichen Weiterentwicklung von Internetanwendungen und Informationssystemen müssen viele Unternehmen asynchrone Aufgaben verwenden, um komplexe Logik oder Vorgänge mit hohen Leistungsanforderungen zu verarbeiten. Die herkömmliche synchrone Verarbeitungsmethode erhöht jedoch den Druck und die Belastung der Systemleistung. Um dieses Problem zu lösen, können wir die asynchrone Aufgabenverarbeitung mithilfe von Nachrichtenwarteschlangen implementieren. In diesem Artikel wird erläutert, wie Warteschlangen zum Implementieren asynchroner Aufgaben im ThinkPHP6-Framework verwendet werden.

1. Installation und Konfiguration

1.1 Laden Sie die Erweiterung herunter und installieren Sie sie

In ThinkPHP6 können wir die Queue-Komponente verwenden, um die Warteschlangenverarbeitung zu implementieren. Installieren Sie, indem Sie Abhängigkeiten in der Datei „composer.json“ hinzufügen, wie unten gezeigt:

composer require topthink/think-queue

1.2 Konfigurationsdatei

Nach erfolgreicher Installation müssen wir die Konfigurationsdatei zum Projekt hinzufügen und entsprechende Konfigurationen durchführen. Erstellen Sie eine neue queue.php-Datei im Konfigurationsverzeichnis und fügen Sie darin die folgenden Konfigurationselemente hinzu:

return [
    'default' => env('queue.driver', 'sync'),

    'connections' => [
        'sync' => [
            'driver' => 'sync',
        ],
        'redis' => [
            'driver' => 'redis',
            'queue' => 'default',
            'connection' => 'default',
            'retry_after' => 90,
            'block_for' => null,
        ],
    ],
];

Dies dient hauptsächlich der Konfiguration des Standardtreibers und der Verbindungsmethode der Warteschlange. Darunter unterstützen wir zwei Antriebsmethoden: Synchronisation (Sync) und Redis (Redis). Redis ist eine verteilte In-Memory-Datenbank, die verschiedene Datenstrukturen unterstützen kann, insbesondere Schlüssel-Wert-Paare, Listen, Mengen, Hashes und andere Datenstrukturen. In der Warteschlangenkomponente von ThinkPHP6 können wir den Redis-Treiber auch als Speichermethode für die Nachrichtenwarteschlange verwenden.

Darüber hinaus können wir auch einige andere Konfigurationen für die Warteschlange durchführen, z. B. Warteschlangennamen (Warteschlange), Verbindungsnamen (Verbindung), Wiederholungszeit (retry_after) usw.

Die oben genannten Konfigurationselemente können auch in der Anwendungskonfigurationsdatei (config/app.php) oder der Umgebungskonfigurationsdatei konfiguriert werden.

2. Warteschlangenaufgaben erstellen

Im Fall von ThinkPHP 6 können wir den Factory-Modus zum Erstellen von Warteschlangenaufgaben verwenden und gleichzeitig eine spezifische Aufgabenlogik implementieren, indem wir die Job-Klasse erben.

2.1 Fabrik erstellen

Wir können die Datei Job.php im Verzeichnis app/job erstellen und eine Fabrikklasse für Nachrichtenwarteschlangen definieren, in der das Methodenhandle für die Verarbeitung bestimmter Warteschlangennachrichten implementiert ist. Die spezifische Implementierung lautet wie folgt:

namespace appjob;

use thinkqueueJob;

class MyJob
{
    public function handle(Job $job, $data)
    {
        //... 具体任务处理逻辑
        //... 执行成功,删除该消息
        $job->delete();
    }
}

Hier definieren wir eine MyJob-Klasse, in der die Handle-Methode für die spezifische Verarbeitung der Warteschlangennachrichtenlogik verantwortlich ist. Wenn die Ausführung erfolgreich ist, können wir diese Warteschlangennachricht löschen, indem wir die Methode $job->delete() aufrufen.

2.2 Aufgaben erstellen

Wir können die Aufgaben erstellen, die wir verarbeiten müssen, indem wir die Job-Klasse erben. Beispielsweise können wir eine SendEmail-Klasse erstellen und diese Aufgabe zum Versenden von E-Mails verwenden.

namespace appjob;

use thinkqueueJob;

class SendEmail extends Job
{
    public function handle()
    {
        // ...具体的邮件发送逻辑
        // ...任务执行完成,删除该消息
        $this->delete();
    }
}

In der Handle-Methode können wir eine spezifische E-Mail-Versandlogik schreiben. Gleichzeitig können wir am Ende auch die Löschmethode aufrufen, um erfolgreich ausgeführte Warteschlangennachrichten zu löschen.

3. Fügen Sie die Aufgabe zur Warteschlange hinzu

Nachdem wir die Warteschlangenaufgabe erstellt haben, müssen wir sie zur anschließenden asynchronen Verarbeitung zur Nachrichtenwarteschlange hinzufügen. Im ThinkPHP6-Framework können wir den Warteschlangendienstanbieter verwenden, um Aufgaben hinzuzufügen.

app('queue')->push(new SendEmail());

Hier erhalten wir die Warteschlangendienstinstanz durch Aufruf von $app['queue'] und fügen die SendEmail-Aufgabe über die Push-Methode zur Warteschlange hinzu.

4. Aufgabenüberwachung und -ausführung

Nachdem eine Aufgabe zur Warteschlange hinzugefügt wurde, müssen wir in der Lage sein, den Aufgabenstatus rechtzeitig zu verstehen und sie zeitnah zu verarbeiten. Für diese Anforderung können wir das Artisan Console-Tool von ThinkPHP6 verwenden. Es handelt sich um eine Erweiterung, die auf der Symfony-Konsolenkomponente basiert und es uns ermöglicht, bestimmte Befehle über die Konsole auszuführen.

4.1 Warteschlangenüberwachung starten

Wir können die Konsole starten und den folgenden Befehl direkt in der Befehlszeile ausführen:

php think queue:work --daemon --queue default

Unter diesen gibt --queue den Namen der Warteschlange an, der angepasst werden kann, und --daemon bedeutet läuft im Hintergrund.

Nachdem dieser Befehl ausgeführt wurde, wird die Warteschlangenüberwachung gestartet und die Nachrichten in der Warteschlange werden einzeln verarbeitet.

4.2 Aufgabenausführungsstatus überwachen

Während der Ausführung der Warteschlange können wir den Monitor verwenden, um den Ausführungsstatus der Warteschlange anzuzeigen. Führen Sie den folgenden Befehl in der Befehlszeile aus:

php think queue:listen --queue default --tries=3

Unter diesen gibt --queue den Namen der Warteschlange an und --tries gibt die Anzahl der Aufgabenwiederholungen an.

Nach der Ausführung werden der Status und der spezifische Ausführungsstatus der aktuellen Nachrichtenwarteschlange ausgegeben. Anhand der ausgegebenen Informationen können wir den Status der Aufgabe zeitnah überwachen und bearbeiten.

5. Zusammenfassung

Durch die Verwendung von Warteschlangen zur Implementierung asynchroner Aufgaben können wir die Leistung und Stabilität des Systems effektiv verbessern. In diesem Artikel wird hauptsächlich die Verwendung von Warteschlangen zur Implementierung asynchroner Aufgaben in ThinkPHP6 vorgestellt und die Warteschlangenkonfiguration, das Erstellen und Hinzufügen von Aufgaben sowie die Warteschlangenüberwachung und -ausführung ausführlich erläutert. Ich hoffe, dass es allen bei der Bewältigung asynchroner Aufgaben in praktischen Anwendungen hilfreich sein wird.

Das obige ist der detaillierte Inhalt vonWie verwende ich Warteschlangen, um asynchrone Aufgaben in ThinkPHP6 zu implementieren?. 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