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
进行修改,具体查看官方文档,这里我不进行详细说明,下面我们直接进入正题。
首先,通过执行php artisan make:job 任务类名称
我们可以实现一个队列任务,执行该命令后,将会在app目录下生成Jobs目录并创建一个新的任务类,该任务类会自动继承IlluminateContractsQueueShouldQueue
接口,我们的队列会调用该任务类的handle方法,因此我们只需要在handle里面去实现我们具体的业务逻辑,就可以轻松的实现任务类。而此时,我们这是对我们任务类进行处理,那我们该怎么去分配任务进行处理呢?
在laravel中,任务的分发,也只需要通过简单的已实现的方法进行任务分配,我们只需要将任务指定对应的队列进行分发处理,具体的实现方式只需要以下简单的几行代码,便可以实现任务分发。
//任务指定到对应的队列 $job = (new TestQueue())->onQueue('队列名称'); //分发任务 dispatch($job);
实现的队列的分发之后,我们通过运行php artisan queue:work
队列处理器,该处理器便会对分发到队列里的任务进行处理,它会一直运行直到它被手动停止或终端关闭。需要注意的是,由于队列处理器是作为一个常驻进程并且在内存中保存着已经启动的应用状态,当我们修改对应的代码时,我们需要重启队列处理器才会载入修改后的代码逻辑。所以当我们对相应的任务类进行修改时,我们需要重启以保证正确性。
Supervisor 配置,这里官方文档讲得挺明白的,我就没必要在复述一次官方文档传送门
这里我直接引用官方文档的话语,简明易懂。
过去,你可能需要在服务器上为每一个调度任务去创建 Cron 入口。但是这种方式很快会变得不友好,因为这些任务调度不在源代码中,并且你每次都需要通过 SSH 链接登录到服务器中才能增加 Cron 入口。
Laravel 命令行调度器允许你在 Laravel 中对命令调度进行清晰流畅的定义。且使用这个任务调度器时,你只需要在你的服务器上创建单个 Cron 入口。你的任务调度在 app/Console/Kernel.php 的 schedule 方法中进行定义。
任务调度定义。在laravel官方文档中,我们更常用的是任务Artisan命令调度和队列调度。
//artisan命令调度 $schedule->command('emails:send Taylor --force')->daily(); //队列调度 $schedule->job(new Heartbeat)->everyFiveMinutes(); // 分发任务到「heartbeats」队列... $schedule->job(new Heartbeat, 'heartbeats')->everyFiveMinutes();
任务调用频率,如上步骤的daily()
、everyFiveMinutes()
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">🎜
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. 🎜🎜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. 🎜
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. 🎜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 | |
Verwandte Empfehlungen: | 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!