Maison  >  Article  >  cadre php  >  Utilisation de Laravel pour le traitement des files d'attente et la planification des tâches : améliorer les performances des applications

Utilisation de Laravel pour le traitement des files d'attente et la planification des tâches : améliorer les performances des applications

WBOY
WBOYoriginal
2023-08-13 18:29:031662parcourir

Utilisation de Laravel pour le traitement des files dattente et la planification des tâches : améliorer les performances des applications

Utiliser Laravel pour le traitement des files d'attente et la planification des tâches : améliorer les performances des applications

Introduction :
Dans le développement d'applications modernes, les performances sont un problème très critique. À mesure que le nombre d’utilisateurs et la quantité de données augmentent, les applications peuvent être confrontées au défi de traiter un grand nombre de requêtes. Pour améliorer les performances et le débit de l'application, nous pouvons utiliser le traitement des files d'attente et la planification des tâches.

Laravel est un framework PHP populaire qui fournit de puissantes fonctions de traitement de file d'attente et de planification de tâches. Dans cet article, nous expliquerons comment utiliser les fonctionnalités de mise en file d'attente et de planification des tâches de Laravel pour améliorer les performances de votre application.

1. Qu'est-ce que le traitement des files d'attente et la planification des tâches ?
Le traitement des files d'attente et la planification des tâches sont une méthode permettant de découpler les tâches de l'application principale et de les traiter de manière asynchrone. Dans une application, certaines tâches peuvent prendre beaucoup de temps, comme l'envoi d'e-mails, le traitement d'images, la génération de rapports, etc. Si vous effectuez ces tâches dans l'application principale, le temps de réponse de l'application sera plus lent, ce qui affectera l'expérience utilisateur.

Le traitement de la file d'attente consiste à mettre ces tâches dans une file d'attente, puis à les traiter une par une par le gestionnaire de file d'attente en arrière-plan. De cette façon, l'application principale peut répondre rapidement aux demandes des utilisateurs, tandis que les tâches sont traitées de manière asynchrone en arrière-plan.

La planification des tâches est une méthode permettant d'exécuter des tâches régulièrement. Certaines tâches ne doivent pas être effectuées immédiatement, mais doivent être effectuées à des intervalles ou à des moments précis, comme la génération de rapports quotidiens, de sauvegardes régulières, etc. Grâce à la planification des tâches, nous pouvons laisser Laravel exécuter des tâches à des moments précis sans les déclencher manuellement.

2. Configuration et utilisation du traitement de la file d'attente

  1. Configuration du pilote de file d'attente
    Dans Laravel, nous pouvons spécifier quel pilote utiliser pour traiter la file d'attente via le fichier de configuration. Ouvrez le fichier config/queue.php et définissez QUEUE_DRIVER sur database, ce qui signifie que nous utiliserons le pilote de base de données pour gérer la file d'attente.
  2. config/queue.php 文件,将 QUEUE_DRIVER 设置为 database,表示我们将使用数据库驱动来处理队列。
  3. 创建队列表
    运行以下命令,创建数据库迁移文件:
php artisan queue:table

然后运行迁移命令:

php artisan migrate

这会在数据库中创建一个 jobs 表,用来存储队列任务。

  1. 定义任务类
    我们需要创建一个类来定义具体的队列任务。在 app/Jobs 目录下,创建一个新的文件 SendEmailJob.php,并在文件中定义如下代码:
<?php

namespace AppJobs;

use IlluminateBusQueueable;
use IlluminateContractsQueueShouldQueue;
use IlluminateFoundationBusDispatchable;
use IlluminateMailMailable;
use IlluminateQueueInteractsWithQueue;
use IlluminateQueueSerializesModels;
use IlluminateSupportFacadesMail;

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

    protected $email;
    protected $subject;
    protected $body;

    public function __construct($email, $subject, $body)
    {
        $this->email = $email;
        $this->subject = $subject;
        $this->body = $body;
    }

    public function handle()
    {
        Mail::to($this->email)->send(new Mailable($this->subject, $this->body));
    }
}

这个类继承了 ShouldQueue 接口,表明这是一个可以放入队列的任务。在 handle() 方法中,我们可以定义具体的任务逻辑,比如发送电子邮件。

  1. 将任务放入队列
    在需要执行任务的地方,可以通过以下代码将任务放入队列:
use AppJobsSendEmailJob;

$job = new SendEmailJob('example@example.com', 'Hello', 'Welcome to Laravel!');
dispatch($job);

这样,这个任务就会被放入队列中等待执行。

  1. 队列处理
    为了执行队列中的任务,我们需要在后台运行队列处理程序。在命令行中,运行以下命令:
php artisan queue:work --tries=3

这会启动一个后台进程,它会从队列中取出任务并执行。--tries 参数表示任务执行失败时的重试次数。如果任务执行失败超过指定的次数,将被放回队列等待处理。

三、任务调度的配置和使用

  1. 配置任务调度
    打开 app/Console/Kernel.php 文件,在 schedule 方法中定义我们的任务调度计划。例如,我们可以在每天早上 6 点执行一个任务:
protected function schedule(Schedule $schedule)
{
    $schedule->job(new SendDailyReportJob)->dailyAt('06:00');
}

以上代码表示,在每天的早上 6 点执行 SendDailyReportJob 这个任务。

  1. 启用任务调度
    我们还需要在服务器上设置一个 Cron 任务,以便 Laravel 可以自动执行任务调度计划。打开服务器的终端,并运行以下命令:
crontab -e

然后在文件中添加以下内容:

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

这会让 Cron 每分钟执行一次 schedule:runCréez la table de file d'attente

Exécutez la commande suivante pour créer le fichier de migration de la base de données : rrreee

Ensuite, exécutez la commande de migration :
rrreee

Cela créera un jobs code dans la base de données > Table, utilisé pour stocker les tâches de file d'attente. <p></p> <ol start="3">Définir une classe de tâches🎜Nous devons créer une classe pour définir des tâches de file d'attente spécifiques. Dans le répertoire <code>app/Jobs, créez un nouveau fichier SendEmailJob.php et définissez le code suivant dans le fichier : rrreee🎜Cette classe hérite l'interface ShouldQueue, indiquant qu'il s'agit d'une tâche qui peut être mise en file d'attente. Dans la méthode handle(), nous pouvons définir une logique de tâche spécifique, comme l'envoi d'un email. 🎜
    🎜Mettez la tâche dans la file d'attente🎜Là où la tâche doit être exécutée, vous pouvez la mettre dans la file d'attente via le code suivant :
rrreee🎜Dans ce De cette façon, la tâche sera de la mettre dans la file d'attente et d'attendre son exécution. 🎜
    🎜Gestion de la file d'attente🎜Afin d'exécuter les tâches dans la file d'attente, nous devons exécuter le gestionnaire de file d'attente en arrière-plan. Depuis la ligne de commande, exécutez la commande suivante :
rrreee🎜Cela démarrera un processus en arrière-plan qui retirera la tâche de la file d'attente et l'exécutera. Le paramètre --tries indique le nombre de tentatives lorsque l'exécution de la tâche échoue. Si la tâche ne s'exécute pas plus que le nombre de fois spécifié, elle sera remise dans la file d'attente pour attendre son traitement. 🎜🎜3. Configuration et utilisation de la planification des tâches🎜🎜🎜Configurer la planification des tâches🎜Ouvrez le fichier app/Console/Kernel.php et définissez notre planification des tâches dans la méthode schedule plan. Par exemple, nous pouvons exécuter une tâche à 6h du matin tous les jours : rrreee🎜Le code ci-dessus indique que la tâche SendDailyReportJob sera exécutée à 6h du matin tous les jours. 🎜
    🎜Activer la planification des tâches🎜Nous devons également configurer une tâche Cron sur le serveur afin que Laravel puisse exécuter automatiquement le plan de planification des tâches. Ouvrez le terminal du serveur et exécutez la commande suivante :
rrreee🎜Puis ajoutez le contenu suivant au fichier : 🎜rrreee🎜Cela amènera Cron à exécuter la commande schedule:run chaque minute, vérifiez et exécutez le plan de planification des tâches. 🎜🎜Résumé : 🎜Laravel fournit de puissantes fonctions de traitement de file d'attente et de planification de tâches qui peuvent nous aider à améliorer les performances et le débit des applications. En plaçant les tâches fastidieuses dans une file d'attente et en les traitant de manière asynchrone via un gestionnaire de file d'attente en arrière-plan, vous pouvez réduire le temps de réponse de l'application principale et améliorer l'expérience utilisateur. Grâce à la fonction de planification des tâches, nous pouvons exécuter certaines tâches régulièrement pour améliorer l'efficacité du développement. 🎜🎜J'espère que cet article pourra vous aider à comprendre et à utiliser les fonctions de traitement de file d'attente et de planification de tâches de Laravel, améliorant ainsi les performances de votre application. Merci! 🎜

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