Maison  >  Article  >  développement back-end  >  Comment utiliser la fonction Queue dans le framework Laravel

Comment utiliser la fonction Queue dans le framework Laravel

WBOY
WBOYoriginal
2023-07-28 21:37:162892parcourir

Comment utiliser la fonction file d'attente (Queue) dans le framework Laravel

Introduction :
Queue (Queue) est un mécanisme de traitement asynchrone courant qui joue un rôle important dans le développement Web. Le framework Laravel fournit de puissantes fonctions de file d'attente qui peuvent facilement gérer diverses tâches en arrière-plan, telles que l'envoi d'e-mails, la génération de rapports, le traitement de Big Data, etc. Cet article expliquera comment utiliser la fonction de file d'attente dans le framework Laravel, y compris la configuration de la file d'attente, la définition et l'exécution des tâches, etc., et donnera des exemples de code correspondants.

1. Configurer la file d'attente

Dans le framework Laravel, la configuration de la file d'attente est très simple. Tout d'abord, dans le fichier de configuration config/queue.php, nous pouvons définir le pilote de file d'attente (Queue Driver) et les paramètres de connexion correspondants. Laravel prend en charge une variété de pilotes de file d'attente, notamment les bases de données, Redis, Beanstalkd, etc. Ici, nous prenons l'exemple du pilote de base de données. config/queue.php中,我们可以设置队列驱动器(Queue Driver)和相应的连接参数。Laravel支持多种队列驱动器,包括数据库、Redis、Beanstalkd等。这里以使用数据库驱动器为例进行说明。

'connections' => [
    'database' => [
        'driver' => 'database',
        'table' => 'jobs',
        'queue' => 'default',
        'retry_after' => 90,
    ],
],

上述配置中,driver指定了队列驱动器为数据库驱动,table指定了存储队列任务的数据表名,queue指定了默认队列的名称,retry_after指定了任务执行失败后的重试时间。

二、定义任务

在Laravel框架中,队列任务(Job)是以类的方式定义的,通常存放在app/Jobs目录下。我们来创建一个简单的队列任务,用于发送邮件。

首先,使用Artisan命令来生成队列任务模板:

php artisan make:job SendEmailJob

生成成功后,在app/Jobs目录下会生成一个名为SendEmailJob的类文件。打开该类文件,可以看到以下代码:

namespace AppJobs;

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

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

    public function __construct()
    {
        //
    }

    public function handle()
    {
        // 发送邮件的逻辑代码
    }
}

在这个类中,我们可以定义发送邮件的逻辑代码。需要注意的是,由于队列任务是异步执行的,因此需要将ShouldQueue接口作为类的实现。同时,其他特征(Trait)DispatchableInteractsWithQueueQueueableSerializesModels提供了对队列的操作和对象序列化等支持。

三、任务入队

在Laravel框架中,任务入队通常是通过调用dispatch函数来实现。下面是一个将SendEmailJob任务入队的示例代码:

use AppJobsSendEmailJob;

dispatch(new SendEmailJob());

上述代码将SendEmailJob任务添加到默认队列中。如果需要指定队列名称,可以使用onQueue方法:

use AppJobsSendEmailJob;

dispatch((new SendEmailJob())->onQueue('emails'));

另外,如果希望任务延迟执行,可以使用delay方法:

use AppJobsSendEmailJob;

$job = (new SendEmailJob())->delay(Carbon::now()->addMinutes(10));

dispatch($job);

四、执行队列任务

在Laravel框架中,可以使用两种方法执行队列任务:同步执行和异步执行。

  1. 同步执行(Sync Driver)

同步执行是指任务在当前请求中立即执行,不经过队列驱动器的处理。在配置文件config/queue.php中,将默认的队列驱动器设为“sync”即可。

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

此时,通过调用dispatch函数将任务入队后,任务将会在当前请求中立即执行。

  1. 异步执行

异步执行是指任务由队列驱动器负责处理和执行。在配置文件config/queue.php中,将默认的队列驱动器设为其他驱动器,例如“database”。

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

然后,在终端中执行以下命令,监听并执行队列任务:

php artisan queue:work

此时,通过调用dispatch函数将任务入队后,任务将被添加到队列中,并由queue:workrrreee

Dans la configuration ci-dessus, driver spécifie que le pilote de file d'attente est un pilote de base de données, table spécifie le nom de la table de données qui stocke les tâches de file d'attente et queue specs Spécifie le nom de la file d'attente par défaut et retry_after spécifie le temps de nouvelle tentative après l'échec de l'exécution de la tâche.


2. Définir des tâches

🎜Dans le framework Laravel, les tâches de file d'attente (Jobs) sont définies sous forme de classes et sont généralement stockées dans le répertoire app/Jobs. Créons une simple tâche de file d'attente pour l'envoi d'e-mails. 🎜🎜Tout d'abord, utilisez la commande Artisan pour générer le modèle de tâche de file d'attente : 🎜rrreee🎜Après une génération réussie, un fichier de classe nommé SendEmailJob sera généré dans le répertoire app/Jobs . Ouvrez ce fichier de classe et vous pourrez voir le code suivant : 🎜rrreee🎜Dans cette classe, nous pouvons définir le code logique pour l'envoi d'e-mails. Il convient de noter que puisque les tâches de file d'attente sont exécutées de manière asynchrone, l'interface ShouldQueue doit être implémentée en tant que classe. En même temps, d'autres traits (Trait) Dispatchable, InteractsWithQueue, Queueable, SerializesModels fournissent des opérations et des objets pour files d'attente Sérialisation et autres supports. 🎜🎜3. Mise en file d'attente des tâches 🎜🎜Dans le framework Laravel, la mise en file d'attente des tâches est généralement implémentée en appelant la fonction dispatch. Voici un exemple de code qui met en file d'attente la tâche SendEmailJob : 🎜rrreee🎜Le code ci-dessus ajoute la tâche SendEmailJob à la file d'attente par défaut. Si vous devez spécifier le nom de la file d'attente, vous pouvez utiliser la méthode onQueue : 🎜rrreee🎜 De plus, si vous souhaitez que la tâche soit retardée, vous pouvez utiliser la méthode delay méthode : 🎜rrreee🎜 4. Exécutez la tâche de file d'attente🎜 🎜Dans le framework Laravel, vous pouvez utiliser deux méthodes pour exécuter les tâches de file d'attente : l'exécution synchrone et l'exécution asynchrone. 🎜
  1. Exécution synchrone (Sync Driver)
🎜L'exécution synchrone signifie que la tâche est exécutée immédiatement dans la requête en cours sans être traitée par le pilote de file d'attente. Dans le fichier de configuration config/queue.php, définissez le pilote de file d'attente par défaut sur "sync". 🎜rrreee🎜A ce moment, après avoir mis la tâche en file d'attente en appelant la fonction dispatch, la tâche sera exécutée immédiatement dans la requête en cours. 🎜
  1. Exécution asynchrone
🎜L'exécution asynchrone signifie que la tâche est traitée et exécutée par le pilote de file d'attente. Dans le fichier de configuration config/queue.php, définissez le lecteur de file d'attente par défaut sur un autre lecteur, tel que « base de données ». 🎜rrreee🎜Ensuite, exécutez la commande suivante dans le terminal pour écouter et exécuter la tâche de file d'attente : 🎜rrreee🎜A ce moment, une fois la tâche mise en file d'attente en appelant la fonction dispatch, la tâche sera ajoutée à la file d'attente, et surveillé et exécuté par la commande queue:work. 🎜🎜Résumé : 🎜Grâce aux étapes ci-dessus, nous pouvons utiliser la fonction de file d'attente dans le framework Laravel et prendre la tâche d'envoyer des e-mails comme exemple pour donner des exemples de code correspondants. La fonction de file d'attente nous permet de mieux gérer les tâches en arrière-plan et d'améliorer la simultanéité et la vitesse de réponse du système. Dans le développement réel, il peut également être combiné avec d'autres fonctions et services tiers pour obtenir des fonctions plus puissantes. J'espère que cet article pourra aider les lecteurs à comprendre et à appliquer la fonction de file d'attente du framework Laravel. 🎜

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