Heim  >  Artikel  >  PHP-Framework  >  So verwenden Sie die Aufgabenplanung in der Laravel-Anwendung

So verwenden Sie die Aufgabenplanung in der Laravel-Anwendung

PHPz
PHPzOriginal
2023-04-06 19:02:541429Durchsuche

Laravel ist ein beliebtes PHP-Framework, das viele verfügbare Komponenten und Tools bereitstellt, einschließlich der Aufgabenplanung. In diesem Artikel erfahren Sie, wie Sie die Aufgabenplanung in Laravel-Anwendungen verwenden.

Was ist Aufgabenplanung?
Aufgabenplanung bezieht sich auf die Technologie zur planmäßigen Ausführung bestimmter Aufgaben. Sichern Sie beispielsweise stündlich Ihre Datenbank oder senden Sie täglich Berichte. In Laravel ähnelt die Aufgabenplanung der von Cron Tabs, ist jedoch einfacher zu implementieren und zu verwalten.

Der Aufgabenplaner in Laravel verwendet Artisan-Befehlszeilentools zur Verwaltung der Planung, einschließlich CRON-Sockets und Powershell.

Sehen wir uns an, wie man die Aufgabenplanung in Laravel implementiert.

Der erste Schritt – Erstellen einer Aufgabe
Das Erstellen einer Aufgabe ist der erste Schritt zur Implementierung der Aufgabenplanung. Planungsaufgaben in Laravel werden in Form von Klassen dargestellt. Das Konvertieren von Aufgaben in Klassen ermöglicht eine bessere Verwaltung und Prüfung, indem die auszuführende Logik definiert wird. Lassen Sie uns eine Beispielaufgabe TutorialTask erstellen: TutorialTask

<?php

namespace App\Jobs;

use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Queue\SerializesModels;

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

    /**
     * Execute the job.
     *
     * @return void
     */
    public function handle()
    {
        // Your logic to execute every minute.
        \Log::info(&#39;Task executed at &#39;.now());
    }
}

这个任务逻辑很简单,每分钟记录一条信息到日志中。现在,我们已经创建了一个任务,但它不会自动执行。我们需要为它设置调度。

第二步——在控制台中设置调度
Laravel提供了许多可以将任务添加到调度中的方法。在这里,我们使用schedule方法在控制台中设置调度。

$schedule->job(new TutorialTask)->everyMinute();

everyMinute方法表示这个任务每分钟都会执行。您可以使用其他预定义的方法,如每小时(hourly)、每天(daily)、每月(monthly)或每周(weekly)。

或者,您可以定义我们自己的频率规则:

$schedule->job(new TutorialTask)->everyFiveMinutes();

这个规则指定任务应该每五分钟运行一次。

第三步——启动任务调度器
现在我们已经为任务设置了调度,接下来我们需要启动任务调度器。我们可以在服务器上运行调度器,也可以使用Laravel自带的计划调度器,它是通过设置Cron Tab来运行的。

在控制台中运行以下命令:

* * * * * cd /path-to-your-project && php artisan schedule:run >> /dev/null 2>&1

这个命令将每分钟运行一次Laravel的调度器。您需要将/path-to-your-project替换为您的Laravel应用程序的路径。>> /dev/null指示将所有输出转发到/dev/null中。

最后一步——启动队列(如果需要)
如果您的应用程序使用队列,则需要启用队列调度器。Laravel使用Redis或Beanstalkd等后端驱动程序来处理队列任务。您需要按照以下步骤启用队列调度器:

.env文件中定义QUEUE_DRIVER

QUEUE_DRIVER=redis

config/queue.php中设置队列连接:

'default' => env('QUEUE_DRIVER', 'redis'),

'connections' => [
    .....
     'redis' => [
            'driver' => 'redis',
            'connection' => 'your-default-redis-connection',
            'queue' => env('REDIS_QUEUE', 'default'),
            'retry_after' => 90,
        ],
  .....
]

修改.env

REDIS_HOST=127.0.0.1
REDIS_PASSWORD=null
REDIS_PORT=6379
REDIS_QUEUE=default
Die Logik dieser Aufgabe ist sehr einfach: Jede Minute wird eine Nachricht im Protokoll aufgezeichnet. Jetzt haben wir eine Aufgabe erstellt, die jedoch nicht automatisch ausgeführt wird. Wir müssen den Zeitplan dafür aufstellen.

Schritt 2 – Richten Sie den Zeitplan in der Konsole ein

Laravel bietet viele Methoden zum Hinzufügen von Aufgaben zum Zeitplan. Hier verwenden wir die Methode schedule, um den Zeitplan in der Konsole festzulegen. Die Methode

php artisan queue:work redis --daemon

everyMinute bedeutet, dass diese Aufgabe jede Minute ausgeführt wird. Sie können andere vordefinierte Methoden wie stündlich (hourly), täglich (daily), monatlich (monthly) oder wöchentlich (weekly) verwenden ).

Alternativ können Sie unsere eigene Häufigkeitsregel definieren: 🎜rrreee🎜Diese Regel legt fest, dass die Aufgabe alle fünf Minuten ausgeführt werden soll. 🎜🎜Schritt 3 – Aufgabenplaner starten🎜Da wir nun den Zeitplan für die Aufgabe eingerichtet haben, müssen wir den Aufgabenplaner starten. Wir können den Scheduler auf dem Server ausführen oder den eigenen Scheduler von Laravel verwenden, der durch Einrichten von Cron Tab ausgeführt wird. 🎜🎜Führen Sie den folgenden Befehl in der Konsole aus: 🎜rrreee🎜Dieser Befehl führt den Planer von Laravel jede Minute aus. Sie müssen /path-to-your-project durch den Pfad zu Ihrer Laravel-Anwendung ersetzen. >> /dev/null leitet die gesamte Ausgabe an /dev/null weiter. 🎜🎜Letzter Schritt – Warteschlange starten (falls erforderlich) 🎜Wenn Ihre Anwendung Warteschlangen verwendet, müssen Sie den Warteschlangenplaner aktivieren. Laravel verwendet Backend-Treiber wie Redis oder Beanstalkd, um Warteschlangenaufgaben zu erledigen. Sie müssen diese Schritte ausführen, um den Warteschlangenplaner zu aktivieren: 🎜🎜 Definieren Sie QUEUE_DRIVER in der Datei .env: 🎜rrreee🎜In config/queue.php code> Legen Sie die Warteschlangenverbindung fest in: 🎜rrreee🎜Ändern Sie die Datei <code>.env, um die Warteschlangenverbindung anzugeben: 🎜rrreee🎜Jetzt starten Sie den Warteschlangenplaner: 🎜rrreee🎜Dieser Befehl startet den Warteschlangenplaner und startet Aufgaben ausführen. 🎜🎜Fazit: 🎜Mit der Aufgabenplanungsfunktion in Laravel können Sie bei Bedarf Befehle ausführen, Programme ausführen oder E-Mails senden. Durch das Erstellen geplanter Aufgaben und das Hinzufügen dieser zur Aufgabenliste können Sie Aufgaben einfach verwalten und ausführen. Denken Sie während dieses Vorgangs daran, den Planer oder Warteschlangenplaner zu aktivieren, damit Aufgaben zu geplanten Zeiten oder in einer Prioritätswarteschlange ausgeführt werden. Viel Glück bei der Verwendung des Laravel-Aufgabenplaners zur Verbesserung der Leistung und Reaktionsfähigkeit Ihrer Anwendung. 🎜

Das obige ist der detaillierte Inhalt vonSo verwenden Sie die Aufgabenplanung in der Laravel-Anwendung. 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