Heim  >  Artikel  >  PHP-Framework  >  Eine ausführliche Erklärung der Warteschlangen und der Aufgabenplanung in Laravel6

Eine ausführliche Erklärung der Warteschlangen und der Aufgabenplanung in Laravel6

藏色散人
藏色散人nach vorne
2021-07-19 15:13:152422Durchsuche

(1) Warteschlangenimplementierung

In Laravel müssen wir nur die Warteschlange bedienen, um dies zu erreichen. Vor der Implementierung müssen wir eine einfache Konfiguration durchführen: config/ So ändern Sie queue.php, bitte schauen Sie in der offiziellen Dokumentation nach. Ich werde hier nicht im Detail darauf eingehen. <code>config/queue.php进行修改,具体查看官方文档,这里我不进行详细说明,下面我们直接进入正题。

  1. 首先,通过执行php artisan make:job 任务类名称我们可以实现一个队列任务,执行该命令后,将会在app目录下生成Jobs目录并创建一个新的任务类,该任务类会自动继承IlluminateContractsQueueShouldQueue接口,我们的队列会调用该任务类的handle方法,因此我们只需要在handle里面去实现我们具体的业务逻辑,就可以轻松的实现任务类。而此时,我们这是对我们任务类进行处理,那我们该怎么去分配任务进行处理呢?
    Eine ausführliche Erklärung der Warteschlangen und der Aufgabenplanung in Laravel6

  2. 在laravel中,任务的分发,也只需要通过简单的已实现的方法进行任务分配,我们只需要将任务指定对应的队列进行分发处理,具体的实现方式只需要以下简单的几行代码,便可以实现任务分发。

    //任务指定到对应的队列
    $job = (new TestQueue())->onQueue(&#39;队列名称&#39;);
    //分发任务
    dispatch($job);
  3. 实现的队列的分发之后,我们通过运行php artisan queue:work队列处理器,该处理器便会对分发到队列里的任务进行处理,它会一直运行直到它被手动停止或终端关闭。需要注意的是,由于队列处理器是作为一个常驻进程并且在内存中保存着已经启动的应用状态,当我们修改对应的代码时,我们需要重启队列处理器才会载入修改后的代码逻辑。所以当我们对相应的任务类进行修改时,我们需要重启以保证正确性。

  4. Supervisor 配置,这里官方文档讲得挺明白的,我就没必要在复述一次官方文档传送门

(二)任务调度

这里我直接引用官方文档的话语,简明易懂。

过去,你可能需要在服务器上为每一个调度任务去创建 Cron 入口。但是这种方式很快会变得不友好,因为这些任务调度不在源代码中,并且你每次都需要通过 SSH 链接登录到服务器中才能增加 Cron 入口。
Laravel 命令行调度器允许你在 Laravel 中对命令调度进行清晰流畅的定义。且使用这个任务调度器时,你只需要在你的服务器上创建单个 Cron 入口。你的任务调度在 app/Console/Kernel.php 的 schedule 方法中进行定义。

  1. 任务调度定义。在laravel官方文档中,我们更常用的是任务Artisan命令调度和队列调度。

    //artisan命令调度
    $schedule->command(&#39;emails:send Taylor --force&#39;)->daily();
    //队列调度
    $schedule->job(new Heartbeat)->everyFiveMinutes();
    // 分发任务到「heartbeats」队列...
    $schedule->job(new Heartbeat, &#39;heartbeats&#39;)->everyFiveMinutes();
  2. 任务调用频率,如上步骤的daily()everyFiveMinutes()

    1. Zuerst können wir durch Ausführen von php artisan make:job task class name eine Warteschlangenaufgabe implementieren. Nach der Ausführung dieses Befehls wird das Jobs-Verzeichnis in der App generiert und erstellt Verzeichnis Eine neue Task-Klasse, die automatisch die Schnittstelle IlluminateContractsQueueShouldQueue> erbt. Unsere Warteschlange ruft die Handle-Methode der Task-Klasse auf, sodass wir nur unsere spezifische Geschäftslogik in den Handle-Task-Klassen implementieren können einfach umgesetzt werden. Zu diesem Zeitpunkt verarbeiten wir unsere Aufgabenklasse. Wie sollten wir also Aufgaben für die Verarbeitung zuweisen? <br><img src="https://img.php.cn/upload/article/000/000/020/9fe3bdf2dc1b025b963d722e3917fd6e-0.png" alt="Bildbeschreibung hier einfügen">🎜
    2. 🎜In Laravel muss die Aufgabenverteilung nur über einfache implementierte Methoden erfolgen. Wir müssen nur die entsprechende Warteschlange für die zu verteilende Aufgabe angeben. Die spezifische Implementierungsmethode erfordert nur die folgenden einfachen Schritte: Mit nur einer Zeile Code, Aufgabenverteilung kann erreicht werden. 🎜rrreee
    3. 🎜Nachdem die Warteschlange verteilt wurde, führen wir den Warteschlangenprozessor php artisan queue:work aus, der die an die Warteschlange verteilten Aufgaben verarbeitet manuell gestoppt oder das Terminal geschlossen wird. Es ist zu beachten, dass wir den Warteschlangenprozessor neu starten müssen, um die geänderte Codelogik zu laden, da der Warteschlangenprozessor ein residenter Prozess ist und den Status der gestarteten Anwendung im Speicher speichert. Wenn wir also die entsprechende Aufgabenklasse ändern, müssen wir neu starten, um die Richtigkeit sicherzustellen. 🎜
    4. 🎜Supervisor-Konfiguration, das offizielle Dokument hier erklärt es sehr klar, es besteht für mich keine Notwendigkeit, das offizielle Dokumentenportal zu wiederholen🎜
    🎜(2) Aufgabenplanung🎜🎜 Hier zitiere ich direkt aus der offiziellen Dokumentation, die prägnant und leicht verständlich ist. 🎜
    🎜In der Vergangenheit mussten Sie möglicherweise für jede geplante Aufgabe auf dem Server einen Cron-Eintrag erstellen. Dieser Ansatz wird jedoch schnell unfreundlich, da diese Aufgabenplaner nicht im Quellcode enthalten sind und Sie sich jedes Mal über einen SSH-Link beim Server anmelden müssen, um einen Cron-Eintrag hinzuzufügen.
    Mit dem Laravel-Befehlszeilenplaner können Sie die Befehlsplanung in Laravel klar und reibungslos definieren. Und wenn Sie diesen Taskplaner verwenden, müssen Sie nur einen einzigen Cron-Eintrag auf Ihrem Server erstellen. Ihr Aufgabenplan wird in der Zeitplanmethode von app/Console/Kernel.php definiert. 🎜
    1. 🎜Aufgabenplanungsdefinition. In der offiziellen Laravel-Dokumentation verwenden wir häufiger die Task-Artisan-Befehlsplanung und die Warteschlangenplanung. 🎜rrreee
    2. 🎜Aufgabenaufrufhäufigkeit, wie z. B. daily(), everyFiveMinutes() usw. in den obigen Schritten, begrenzen alle die Aufrufhäufigkeit Es ist im wahrsten Sinne des Wortes nicht schwer zu verstehen, dass es einmal pro Minute oder jeden Tag aufgerufen werden soll. Der konkrete Aufruf lautet wie folgt (um die Länge zusammenzufassen). Weitere Informationen finden Sie auch in der offiziellen Dokumentation. 🎜
    ->everyFiveMinutes();Alle fünf Minuten eine Aufgabe ausführenAlle zehn Minuten eine Aufgabe ausführenFühren Sie alle fünfzehn Minuten eine Aufgabe ausFühren Sie alle dreißig Minuten eine Aufgabe ausFühren Sie jede Stunde eine Aufgabe aus Eine Aufgabe wird zur 17. Minute jeder Stunde ausgeführtEine Aufgabe wird jeden Tag um Mitternacht ausgeführt (Anmerkung des Übersetzers: Jeden Tag um Mitternacht). 1:00 und 13:00 jeden Tag Führen Sie die Aufgabe einmal pro Woche ausFühren Sie die aus Aufgabe einmal jeden Montag um 8 UhrFühren Sie die Aufgabe einmal im Monat ausFühren Sie die aus Aufgabe einmal im Monat um 15:00 Uhr am 4.Führen Sie vierteljährlich eine Aufgabe ausFühren Sie jedes Jahr eine Aufgabe ausStellen Sie die Zeitzone einZuletzt starten Sie natürlich den Scheduler und führen ihn aus . Tatsächlich gibt es nicht viel zu besprechen, aber diese beiden sind normalerweise für unsere Projekte von entscheidender Bedeutung. Die offiziellen Dokumente sind zu umständlich und unnötig, daher werde ich kurz auf die häufig verwendeten Dokumente eingehen. Mit der Methode hat Laravel diese allgemeinen Vorgänge gekapselt und so viele Probleme reduziert. Wenn Sie daran interessiert sind, die Implementierungslogik zu verstehen, sollten Sie zumindest wissen, wie man sie verwendet. Verwandte Empfehlungen:
    Methoden 描 beschreibe-& gt; Jede Minute eine Aufgabe
    ->everyTenMinutes();
    -> ;everyFifteenMinutes ();
    ->everyThirtyMinutes();
    ->stündlich();
    ->hourlyAt(17);
    ->daily();
    ->weekly();
    ->weeklyOn(1, '8:00');
    ->monatlich();
    ->monatlichOn(4, '15:00');
    -> ;vierteljährlich();
    ->jährlich();
    ->timezone('America/New_York');
    (3) Zusammenfassung
    Die neuesten fünf Laravel-Video-Tutorials

Das obige ist der detaillierte Inhalt vonEine ausführliche Erklärung der Warteschlangen und der Aufgabenplanung in Laravel6. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:csdn.net. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen