Maison >cadre php >Laravel >Découvrez comment ajuster les tâches (Jobs) dans les projets Laravel

Découvrez comment ajuster les tâches (Jobs) dans les projets Laravel

PHPz
PHPzoriginal
2023-04-14 09:33:511344parcourir

Dans Laravel, les tâches (Jobs) sont un mécanisme de gestion des tâches asynchrones. Laravel fournit une large gamme de fonctions de traitement de tâches (Jobs), qui peuvent facilement configurer des tâches (Jobs) pour qu'elles s'exécutent de manière asynchrone en arrière-plan, permettant à votre application de répondre rapidement aux demandes et de traiter les tâches efficacement.

Cet article explorera comment ajuster les tâches (Jobs) dans les applications Laravel, y compris comment définir des tâches (Jobs) et comment configurer, utiliser et gérer des tâches (Jobs).

Définir des tâches (Jobs)

Définir une tâche (Jobs) dans Laravel est très simple. Tout d'abord, créez une nouvelle classe de tâches (Jobs) et placez le code de traitement des tâches dans la méthode handle : handle 方法中:

<?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 ProcessPodcast implements ShouldQueue
{
    use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;

    public function handle()
    {
        // 处理任务的代码
    }
}

上面的代码中,我们创建了一个名为 ProcessPodcast 的任务类,它继承自 ShouldQueue 接口,表明这是一个需要在队列中处理的任务。该类还使用了 Laravel 的 Dispatchable trait,该 trait 可以让我们使用 dispatch 方法将任务推送到 Laravel 的队列系统中。

除了 handle() 方法外,任务(Jobs)类还可以使用 Laravel 提供的其他方法和功能,例如 before()after() 方法,用于在任务(Jobs)开始和结束时触发某些操作。此外,您还可以使用队列连接器(Queue Connectors)来连接不同的队列和队列服务。

配置队列驱动程序

Laravel支持使用不同的队列驱动程序来管理和运行任务(Jobs)队列。默认情况下,Laravel使用 sync 驱动程序,它会同步执行任务,并在任务完成后返回结果。

要配置队列驱动程序,您需要在 Laravel 的配置文件 config/queue.php 中定义您想要使用的驱动程序。例如,为了使用 Redis 驱动程序,您可以将以下代码添加到 config/queue.php 文件中:

&#39;connections&#39; => [
    // ...
    'redis' => [
        'driver' => 'redis',
        'connection' => 'default',
        'queue' => env('REDIS_QUEUE', 'default'),
        'retry_after' => 90,
        'block_for' => null,
    ],
    // ...
],

上面的代码中,我们将 Redis 队列驱动程序配置为使用默认连接,将队列命名为 default ,并设置了队列的一些属性,例如重试间隔和最大阻塞时间。

推送任务(Jobs)到队列

一旦您定义了一个任务(Jobs),就可以使用 dispatch() 方法将任务推送到 Laravel 的队列系统中。例如:

ProcessPodcast::dispatch($podcast);

在上面的代码中,我们将 $podcast 变量作为参数传递给任务(Jobs)类的构造函数,然后使用 dispatch() 方法将任务推送到队列中。

当您推送任务(Jobs)到队列中时,Laravel会将任务(Jobs)的类、构造函数参数以及任何其他必需的数据序列化为一个字符串。然后,该字符串将被发送到队列,并最终被取出,用于在后台异步地执行任务。

监听和调试队列

一旦您将任务(Jobs)推送到队列中,就可以使用 Laravel 的队列监听器(Queue Listener)来监听队列并处理任务。在命令行中,您可以使用 php artisan queue:listen 命令启动队列监听器。例如:

php artisan queue:listen redis --queue=default

在上面的例子中,我们使用 redis 队列驱动程序,并将队列命名为 defaultrrreee

Dans le code ci-dessus, nous avons créé une classe de tâches nommée ProcessPodcast, elle hérite du ShouldQueue, indiquant qu'il s'agit d'une tâche qui doit être traitée dans la file d'attente. Cette classe utilise également le trait Dispatchable de Laravel, qui nous permet de transmettre des tâches au système de file d'attente de Laravel à l'aide de la méthode dispatch.

En plus de la méthode handle(), la classe Jobs peut également utiliser d'autres méthodes et fonctions fournies par Laravel, telles que before() et after( ) Méthode utilisée pour déclencher certaines opérations en début et en fin de tâches (Jobs). De plus, vous pouvez utiliser des connecteurs de file d'attente pour connecter différentes files d'attente et services de file d'attente.

Configuration des pilotes de file d'attente

Laravel prend en charge l'utilisation de différents pilotes de file d'attente pour gérer et exécuter les files d'attente de tâches (tâches). Par défaut, Laravel utilise le pilote sync, qui exécute les tâches de manière synchrone et renvoie les résultats lorsque la tâche est terminée. 🎜🎜Pour configurer un pilote de file d'attente, vous devez définir le pilote que vous souhaitez utiliser dans le fichier de configuration de Laravel config/queue.php. Par exemple, afin d'utiliser le pilote Redis, vous pouvez ajouter le code suivant au fichier config/queue.php : 🎜rrreee🎜Dans le code ci-dessus, nous configurons le pilote de file d'attente Redis pour utiliser le connexion par défaut, nommez la file d'attente default et définissez certaines propriétés de la file d'attente, telles que l'intervalle de nouvelle tentative et le temps de blocage maximum. 🎜🎜🎜Pousser les tâches vers la file d'attente🎜🎜🎜Une fois que vous avez défini une tâche, vous pouvez utiliser la méthode dispatch() pour pousser la tâche vers le système de file d'attente de Laravel. Par exemple : 🎜rrreee🎜Dans le code ci-dessus, nous passons la variable $podcast en paramètre au constructeur de la classe Jobs, puis utilisons la méthode dispatch() Les tâches sont placées dans la file d'attente. 🎜🎜Lorsque vous placez un travail dans la file d'attente, Laravel sérialise la classe du travail, les paramètres du constructeur et toute autre donnée requise dans une chaîne. La chaîne est ensuite envoyée à la file d'attente et finalement retirée pour être exécutée de manière asynchrone en arrière-plan. 🎜🎜🎜Files d'attente d'écoute et de débogage🎜🎜🎜Une fois que vous avez poussé les tâches (Jobs) vers la file d'attente, vous pouvez utiliser l'écouteur de file d'attente de Laravel (Queue Listener) pour écouter la file d'attente et traiter les tâches. Depuis la ligne de commande, vous pouvez utiliser la commande php artisan queue:listen pour démarrer un écouteur de file d'attente. Par exemple : 🎜rrreee🎜Dans l'exemple ci-dessus, nous utilisons le pilote de file d'attente redis et nommons la file d'attente default . Cette commande lancera un écouteur en attente des tâches dans la file d'attente. Cet écouteur sera chargé de supprimer le travail de la file d'attente et de l'exécuter une fois que le travail sera disponible. 🎜🎜Vous pouvez également utiliser le planificateur de files d'attente dans votre application Laravel pour exécuter les tâches comme prévu. Un planificateur de files d'attente est un mécanisme qui exécute automatiquement des tâches dans un délai spécifié. Pour installer un planificateur de files d'attente, vous devez définir les travaux (Jobs) que vous souhaitez exécuter dans le planificateur de votre application (Scheduler) et les utiliser avec le système de files d'attente. Une fois configuré, le planificateur de file d'attente poussera automatiquement les tâches (Jobs) vers la file d'attente dans l'intervalle de temps spécifié. 🎜🎜🎜Résumé🎜🎜🎜Configurer et gérer des jobs (Jobs) dans une application Laravel est un mécanisme relativement simple et pratique. Cet article explique comment définir des tâches (tâches), configurer des pilotes de file d'attente et utiliser des écouteurs de file d'attente et des planificateurs de files d'attente pour traiter les tâches. En utilisant la fonctionnalité de traitement des tâches de Laravel, vous pouvez laisser votre application traiter les tâches en arrière-plan et obtenir des performances plus élevées et une meilleure expérience utilisateur. 🎜

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn