Heim >PHP-Framework >Laravel >Message Queuing in Laravel: Entkopplung der asynchronen Aufgabenverarbeitung

Message Queuing in Laravel: Entkopplung der asynchronen Aufgabenverarbeitung

PHPz
PHPzOriginal
2023-08-26 19:15:331294Durchsuche

Message Queuing in Laravel: Entkopplung der asynchronen Aufgabenverarbeitung

Message Queuing in Laravel: Entkopplung der asynchronen Aufgabenverarbeitung

Einführung:
In der Webentwicklung ist der Umgang mit zeitaufwändigen Aufgaben ein häufiges Problem. Der herkömmliche Ansatz besteht darin, Aufgaben direkt während der Verarbeitung von Webanforderungen auszuführen. Dieser Ansatz führt jedoch zu einer langsamen Antwortzeit der Anforderung und ist anfällig für das Problem, dass bei einem Fehler bei der Aufgabe kein erneuter Versuch möglich ist. Um diese Probleme zu lösen, können Nachrichtenwarteschlangen zur asynchronen Aufgabenverarbeitung verwendet werden. Das Laravel-Framework bietet benutzerfreundliche und leistungsstarke Warteschlangenfunktionen. In diesem Artikel wird erläutert, wie Sie Nachrichtenwarteschlangen in Laravel verwenden, um die asynchrone Aufgabenverarbeitung zu entkoppeln.

1. Warum die Nachrichtenwarteschlange verwenden? Die Verwendung der Nachrichtenwarteschlange hat die folgenden Hauptvorteile:

    Entkoppelte Aufgabenverarbeitung: Durch das Einfügen von Aufgaben in die Nachrichtenwarteschlange kann eine Aufgabenentkopplung erreicht werden. Das heißt, das Auslösen und Ausführen von Aufgaben kann separat gehandhabt werden. Der Ausführer der Aufgabe muss nur die Warteschlange überwachen, ohne sich um die Details der Aufgabenauslösung zu kümmern.
  1. Asynchrone Verarbeitung: Nachdem die Aufgabe in die Nachrichtenwarteschlange gestellt wurde, kann die Antwortzeit der Webanforderung schneller sein, da die Ausführung der Aufgabe die Verarbeitung der Webanforderung nicht blockiert.
  2. Wiederholungsmechanismus: Nachrichtenwarteschlangensysteme bieten normalerweise einen Fehlerwiederholungsmechanismus, der Aufgaben automatisch wiederholen kann, um sicherzustellen, dass Aufgaben schließlich ausgeführt werden können.
2. Grundkonfiguration des Laravel-Warteschlangensystems

In Laravel erfordert die Verwendung der Warteschlangenfunktion einige Grundkonfigurationen. Zuerst müssen Sie den Warteschlangentreiber in der Konfigurationsdatei von Laravel konfigurieren. Sie können eine Datenbank, Redis usw. als Warteschlangenspeicher verwenden. Fügen Sie der Datei .env die folgende Konfiguration hinzu:

QUEUE_CONNECTION=database
.env 文件中:

php artisan queue:table

然后,在Laravel的数据库迁移文件中添加用于存储队列任务的数据表。可以使用以下命令生成迁移文件:

php artisan migrate

生成的迁移文件中会包含一个名为jobs的数据表。

接下来,运行迁移命令来创建数据表:

<?php

namespace AppJobs;

use IlluminateBusQueueable;
use IlluminateContractsQueueShouldQueue;
use IlluminateFoundationBusDispatchable;
use IlluminateQueueInteractsWithQueue;
use IlluminateQueueSerializesModels;

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

    protected $podcast;

    public function __construct($podcast)
    {
        $this->podcast = $podcast;
    }

    public function handle()
    {
        // 处理耗时的任务
        // 例如,发送邮件、生成报表等
    }
}

三、定义队列任务
在Laravel中,队列任务是通过继承IlluminateContractsQueueShouldQueue接口并实现handle方法来定义的。下面是一个示例的队列任务定义:

<?php

use AppJobsProcessPodcast;
use IlluminateHttpRequest;

class PodcastController extends Controller
{
    public function store(Request $request)
    {
        // 处理其他的请求逻辑

        ProcessPodcast::dispatch($podcast)
            ->delay(now()->addMinutes(10));
    }
}

handle方法中编写具体的任务逻辑。其中,ShouldQueue接口和DispatchableInteractsWithQueueQueueableSerializesModels这几个特质是Laravel队列系统所需的。

四、触发任务
要触发一个队列任务,可以使用dispatch方法。下面是一个触发任务的示例代码:

php artisan queue:listen

这里,我们使用dispatch方法触发了一个ProcessPodcast任务,并可以设置任务的延迟执行时间。

五、任务的监听与执行
Laravel提供了queue:listen命令来监听并执行队列任务。可以在终端中运行以下命令来启动队列监听器:

QUEUE_TRIES=3

队列监听器将会不断地监听队列并执行任务。

六、重试机制
Laravel队列系统提供了对失败任务的重试机制。如果任务执行失败,队列监听器会自动将其重新放入队列,并根据配置的重试次数进行重试。可以在.env Fügen Sie dann die Datentabelle hinzu, die zum Speichern von Warteschlangenaufgaben in der Datenbankmigrationsdatei von Laravel verwendet wird. Sie können den folgenden Befehl verwenden, um eine Migrationsdatei zu generieren:

rrreee

Die generierte Migrationsdatei enthält eine Datentabelle mit dem Namen jobs.

Führen Sie als Nächstes den Migrationsbefehl aus, um die Datentabelle zu erstellen:
rrreee

3. Warteschlangenaufgaben definieren🎜In Laravel erben Warteschlangenaufgaben die Schnittstelle IlluminateContractsQueueShouldQueue> und implementieren die Methode <code>handle zu definieren. Das Folgende ist ein Beispiel für die Definition einer Warteschlangenaufgabe: 🎜rrreee🎜Schreiben Sie eine spezifische Aufgabenlogik in die Methode handle. Darunter die Schnittstelle ShouldQueue und die Merkmale Dispatchable, InteractsWithQueue, Queueable, SerializesModels werden vom Warteschlangensystem von Laravel benötigt. 🎜🎜4. Aufgaben auslösen🎜Um eine Warteschlangenaufgabe auszulösen, können Sie die Methode dispatch verwenden. Das Folgende ist ein Beispielcode zum Auslösen einer Aufgabe: 🎜rrreee🎜Hier verwenden wir die Methode dispatch, um eine Aufgabe ProcessPodcast auszulösen, und können die verzögerte Ausführungszeit der Aufgabe festlegen Aufgabe. 🎜🎜5. Aufgabenüberwachung und -ausführung🎜Laravel bietet den Befehl queue:listen zum Überwachen und Ausführen von Warteschlangenaufgaben. Sie können den folgenden Befehl im Terminal ausführen, um den Warteschlangen-Listener zu starten: 🎜rrreee🎜Der Warteschlangen-Listener überwacht kontinuierlich die Warteschlange und führt Aufgaben aus. 🎜🎜 6. Wiederholungsmechanismus 🎜 Das Laravel-Warteschlangensystem bietet einen Wiederholungsmechanismus für fehlgeschlagene Aufgaben. Wenn die Ausführung der Aufgabe fehlschlägt, stellt der Warteschlangen-Listener sie automatisch wieder in die Warteschlange und versucht es entsprechend der konfigurierten Anzahl von Wiederholungen erneut. Die Anzahl der Wiederholungsversuche kann in der Datei .env konfiguriert werden: 🎜rrreee🎜Die Konfiguration hier gibt an, dass die Aufgabe nach einem Fehler bis zu dreimal wiederholt wird. 🎜🎜7. Zusammenfassung🎜Durch die Verwendung des Laravel-Warteschlangensystems können wir problemlos eine asynchrone Aufgabenverarbeitung implementieren. Durch das Platzieren von Aufgaben in der Nachrichtenwarteschlange können Aufgabenentkopplung, asynchrone Verarbeitung und Wiederholungsversuche bei Fehlern erreicht werden, wodurch die Leistung und Zuverlässigkeit von Webanwendungen verbessert wird. Das Obige ist eine grundlegende Einführung in die Verwendung von Nachrichtenwarteschlangen für die asynchrone Aufgabenverarbeitung in Laravel. Ich hoffe, es wird Ihnen hilfreich sein. 🎜

Das obige ist der detaillierte Inhalt vonMessage Queuing in Laravel: Entkopplung der asynchronen Aufgabenverarbeitung. 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