Heim > PHP-Framework > Laravel > Hauptteil

Laravel-Warteschlangen und Aufgabenplaner: Gleichzeitige Verarbeitung einer großen Anzahl von Aufgaben

王林
Freigeben: 2023-08-13 09:51:15
Original
2197 Leute haben es durchsucht

Laravel-Warteschlangen und Aufgabenplaner: Gleichzeitige Verarbeitung einer großen Anzahl von Aufgaben

Laravel Queue und Task Scheduler: Gleichzeitige Verarbeitung einer großen Anzahl von Aufgaben

In der modernen Webanwendungsentwicklung gibt es häufig Szenarien, in denen eine große Anzahl von Aufgaben verarbeitet werden muss. Versenden Sie beispielsweise E-Mails, erstellen Sie Berichte, verarbeiten Sie Big Data usw. Wenn die Anzahl der Aufgaben jedoch sehr groß ist, kann eine einzelne Anforderung zur Verarbeitung dieser Aufgaben dazu führen, dass die Anforderung lange verzögert wird oder die Systemressourcen erschöpft sind. Um dieses Problem zu lösen, bietet Laravel Warteschlangen- und Aufgabenplanerfunktionen, die eine große Anzahl von Aufgaben gleichzeitig verarbeiten können.

1. Laravel Queue

Queue ist ein Mechanismus, der Aufgaben zur asynchronen Verarbeitung in den Hintergrund verschiebt. Über die Warteschlange kann unsere Anwendung zeitaufwändige Vorgänge im Hintergrund verarbeiten, ohne die Antwortgeschwindigkeit des Benutzers zu beeinträchtigen.

In Laravel können wir verschiedene Methoden verwenden, um Warteschlangenfunktionen zu implementieren, z. B. Datenbankwarteschlange, Redis-Warteschlange, Beanstalkd-Warteschlange usw. Hier nehmen wir als Beispiel eine Datenbankwarteschlange, um zu demonstrieren, wie die Funktion gleichzeitiger Verarbeitungsaufgaben implementiert wird.

  1. Konfigurieren des Warteschlangentreibers

Zuerst müssen wir den Warteschlangentreiber in Laravels Konfigurationsdatei config/queue.php konfigurieren. Wir entscheiden uns für die Verwendung der Datenbankwarteschlange, setzen die Option connection auf database und legen einige Konfigurationen für die Datenbankverbindung fest. config/queue.php中配置队列驱动。我们选择使用数据库队列,将connection选项设置为database,以及设置一些数据库连接的相关配置。

'default' => env('QUEUE_CONNECTION', 'database'),
'connections' => [
    'database' => [
        'driver' => 'database',
        'table' => 'jobs',
        'queue' => 'default',
        'retry_after' => 90,
    ],
],
Nach dem Login kopieren

2.创建队列表

接下来,我们需要创建一个用于存储队列任务的数据表。可以使用Laravel提供的Artisan命令php artisan queue:table快速生成迁移文件,并执行迁移。

php artisan queue:table
php artisan migrate
Nach dem Login kopieren
  1. 创建任务类

然后,我们需要创建一个任务类,用于处理具体的任务逻辑。在Laravel中,任务类一般放在app/Jobs目录下,可以通过Artisan命令php artisan make:job快速生成一个任务类。

php artisan make:job SendEmail
Nach dem Login kopieren

生成的任务类SendEmail位于app/Jobs目录下,我们可以在该类的handle方法中编写任务逻辑。

<?php

namespace AppJobs;

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

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

    /**
     * Execute the job.
     *
     * @return void
     */
    public function handle()
    {
        // 处理发送邮件的逻辑
        // ...
    }
}
Nach dem Login kopieren

在任务类中,我们需要实现ShouldQueue接口,并定义handle方法来处理任务逻辑。

  1. 推送任务到队列

最后,我们可以通过以下代码将任务推送到队列中。

use AppJobsSendEmail;

SendEmail::dispatch();
Nach dem Login kopieren

通过dispatch方法将任务加入到队列中,系统会自动根据配置选择相应的队列驱动进行处理。

二、Laravel任务调度器

Laravel还提供了一个任务调度器的功能,可以将任务设置为定时执行或者周期性执行。我们可以通过任意的Laravel自带的时间表(Laravel Time Scheduling)来设置任务的执行规则。

  1. 定义任务调度

首先,我们需要在app/Console/Kernel.php文件的schedule方法中定义任务调度。例如,我们定义一个每分钟执行一次的任务。

protected function schedule(Schedule $schedule)
{
    $schedule->job(new SendEmail)->everyMinute();
}
Nach dem Login kopieren

在上述代码中,我们使用了任务类SendEmail作为调度的执行体,然后通过everyMinute方法设置任务执行频率为每分钟一次。

  1. 初始化任务调度

任务调度定义成功之后,我们需要在服务器上设置一个Cron表达式以便执行任务调度。

在Linux系统上,可以通过crontab命令来编辑和设置Cron表达式。

crontab -e
Nach dem Login kopieren

然后,在打开的文件中加入以下代码:

* * * * * php /path/to/artisan schedule:run >> /dev/null 2>&1
Nach dem Login kopieren

上述代码表示每分钟执行一次php artisan schedule:runrrreee

2. Erstellen Sie eine Warteschlangentabelle

Als nächstes müssen wir eine Datentabelle erstellen, um Warteschlangenaufgaben zu speichern. Sie können den von Laravel bereitgestellten Artisan-Befehl php artisan queue:table verwenden, um schnell Migrationsdateien zu generieren und die Migration durchzuführen.

rrreee

    Aufgabenklasse erstellen

    Dann müssen wir eine Aufgabenklasse erstellen, um bestimmte Aufgabenlogik zu verarbeiten. In Laravel werden Aufgabenklassen im Allgemeinen im Verzeichnis app/Jobs abgelegt. Sie können eine Aufgabenklasse schnell über den Artisan-Befehl php artisan make:job generieren.

    rrreee🎜Die generierte Aufgabenklasse SendEmail befindet sich im Verzeichnis app/Jobs. Wir können Aufgabenlogik in die Methode handle dieser Klasse schreiben . 🎜rrreee🎜In der Task-Klasse müssen wir die Schnittstelle ShouldQueue implementieren und die Methode handle definieren, um die Task-Logik zu verarbeiten. 🎜
      🎜Schieben Sie die Aufgabe in die Warteschlange🎜🎜🎜Schließlich können wir die Aufgabe mit dem folgenden Code in die Warteschlange verschieben. 🎜rrreee🎜Fügen Sie die Aufgabe über die Methode dispatch zur Warteschlange hinzu, und das System wählt automatisch den entsprechenden Warteschlangentreiber zur Verarbeitung entsprechend der Konfiguration aus. 🎜🎜2. Laravel Task Scheduler🎜🎜Laravel bietet auch eine Taskplaner-Funktion, mit der Aufgaben so eingestellt werden können, dass sie regelmäßig oder periodisch ausgeführt werden. Wir können Aufgabenausführungsregeln über jeden der eigenen Zeitpläne von Laravel festlegen (Laravel Time Scheduling). 🎜🎜🎜Aufgabenplanung definieren🎜🎜🎜Zuerst müssen wir die Aufgabenplanung in der Methode schedule der Datei app/Console/Kernel.php definieren. Beispielsweise definieren wir eine Aufgabe, die jede Minute ausgeführt wird. 🎜rrreee🎜Im obigen Code verwenden wir die Aufgabenklasse SendEmail als Ausführungskörper des Zeitplans und legen dann die Häufigkeit der Aufgabenausführung über everyMinute auf einmal pro Minute fest Verfahren. 🎜
        🎜Aufgabenplanung initialisieren🎜🎜🎜Nachdem die Aufgabenplanung erfolgreich definiert wurde, müssen wir einen Cron-Ausdruck auf dem Server festlegen, um die Aufgabenplanung durchzuführen. 🎜🎜Auf Linux-Systemen können Sie Cron-Ausdrücke über den Befehl crontab bearbeiten und festlegen. 🎜rrreee🎜Fügen Sie dann den folgenden Code zur geöffneten Datei hinzu: 🎜rrreee🎜Der obige Code bedeutet, dass der Befehl php artisan scheme:run jede Minute ausgeführt wird, wodurch die Aufgabenplanung ausgelöst wird. 🎜🎜Durch die obige Konfiguration können wir die Funktion der geplanten Ausführung und periodischen Ausführung von Aufgaben realisieren. 🎜🎜Zusammenfassung: 🎜🎜Durch die Funktionen der Laravel-Warteschlange und des Aufgabenplaners können wir die Notwendigkeit, eine große Anzahl von Aufgaben gleichzeitig zu verarbeiten, leicht erkennen. Die Warteschlange kann Aufgaben zur asynchronen Verarbeitung in den Hintergrund verschieben, um ein Blockieren von Benutzeranforderungen zu vermeiden. Der Aufgabenplaner ermöglicht die regelmäßige oder periodische Ausführung unserer Aufgaben nach Zeitregeln und verbessert so die Effizienz der Aufgabenbearbeitung. 🎜🎜Das Obige ist eine Einführung in die Laravel-Warteschlange und den Aufgabenplaner. Ich hoffe, es wird für alle hilfreich sein! 🎜

Das obige ist der detaillierte Inhalt vonLaravel-Warteschlangen und Aufgabenplaner: Gleichzeitige Verarbeitung einer großen Anzahl von Aufgaben. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

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
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!