Maison  >  Article  >  cadre php  >  Utiliser Laravel pour le traitement des files d'attente 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

WBOY
WBOYoriginal
2023-08-12 20:18:251653parcourir

Utiliser 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 :
Avec le développement d'applications, nous sommes souvent confrontés au défi de gérer un grand nombre de tâches et de requêtes. Afin d'améliorer les performances et la réactivité des applications, le framework Laravel fournit un puissant système de traitement de file d'attente et de planification des tâches. Cet article explique comment utiliser la fonction de file d'attente de Laravel pour gérer les tâches asynchrones et planifier des tâches récurrentes afin d'améliorer les performances et la stabilité des applications.

1. Introduction à la fonction de file d'attente de Laravel
Laravel fournit un service de file d'attente avec une bonne abstraction, qui peut ajouter des tâches qui doivent être exécutées de manière asynchrone à la file d'attente, puis les traiter par des processus en arrière-plan ou des travailleurs de file d'attente. Ce mode d'exécution de tâches asynchrone est appelé « file d'attente », qui peut efficacement séparer certaines tâches non en temps réel ou chronophages du processus de requête principal, permettant à l'application de répondre plus rapidement aux requêtes.

Avantages de la file d'attente Laravel :

  1. Exécution asynchrone : après avoir ajouté une tâche à la file d'attente, une réponse peut être renvoyée immédiatement à l'utilisateur, tandis que la tâche sera exécutée de manière asynchrone en arrière-plan.
  2. Amélioration de la simultanéité : étant donné que les tâches sont mises dans la file d'attente, plusieurs tâches peuvent être traitées en même temps, améliorant ainsi les capacités de traitement simultané de l'application.
  3. Traitement tolérant aux pannes : lorsque l'exécution d'une tâche échoue, Laravel remet la tâche dans la file d'attente pour garantir qu'elle peut être exécutée avec succès.
  4. Sûr et stable : en plaçant les tâches dans la file d'attente, certaines opérations sensibles ou chronophages peuvent être évitées et ne bloquent pas le processus de demande normal.
  5. Prise en charge des microservices : les services de file d'attente peuvent être découplés des autres microservices pour améliorer l'évolutivité des applications.

2. Configurez la file d'attente Laravel

  1. Configurez le pilote
    Dans le fichier de configuration de Laravel config/queue.php, vous pouvez configurer le pilote de file d'attente. Laravel prend en charge plusieurs types de pilotes de file d'attente, tels que base de données, redis, beanstalkd, etc. config/queue.php中,可以配置队列的驱动程序。Laravel支持多种类型的队列驱动程序,如database、redis、beanstalkd等。

示例配置:

'default' => env('QUEUE_CONNECTION', 'redis'),
'connections' => [
    // Redis 驱动配置
    'redis' => [
        'driver' => 'redis',
        'connection' => 'default',
        'queue' => env('Redis_QUEUE', 'default'),
        'retry_after' => 90,
        'block_for' => null,
    ],
],
  1. 启动队列工作人员
    在Laravel中,队列任务需要由队列工作人员(Queue Worker)来执行。可以使用Laravel自带的Artisan命令php artisan queue:work来启动队列工作人员,并根据需要进行配置。

示例命令:

php artisan queue:work --queue=queue-name --tries=3

该命令将启动一个队列工作人员,监听指定的队列(queue-name),并在任务执行失败时最多尝试3次。

三、使用Laravel队列处理任务

  1. 创建并分发任务
    首先,我们需要创建一个任务类。可以使用Laravel自带的Artisan命令php artisan make:job来创建一个新的队列任务类。

示例任务类:

<?php

namespace AppJobs;

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

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

    protected $podcast;

    /**
     * Create a new job instance.
     *
     * @param  Podcast  $podcast
     * @return void
     */
    public function __construct(Podcast $podcast)
    {
        $this->podcast = $podcast;
    }

    /**
     * Execute the job.
     *
     * @return void
     */
    public function handle()
    {
        // 处理任务逻辑
    }
}

通过实现ShouldQueue接口,该任务类将成为一个可以被队列处理的任务类。

然后,我们可以使用队列的dispatch方法来将任务分发到队列中,等待异步处理。

示例分发任务:

use AppJobsProcessPodcast;

ProcessPodcast::dispatch($podcast);
  1. 监听队列并执行任务
    当队列工作人员启动后,它会监听指定的队列,一旦有新的任务进入队列,就会执行任务的handle方法。

在任务的handle方法中,编写需要异步执行的逻辑代码。

示例任务处理逻辑:

public function handle()
{
    // 执行异步任务
    // ...
    // 执行完成后,任务将从队列中移除
}

通过以上步骤,我们就可以实现将需要异步执行的任务添加到队列中,并由队列工作人员来处理执行。

四、使用Laravel任务调度功能
除了队列处理功能以外,Laravel还提供了任务调度功能,能够定期执行某个任务或者重复执行指定次数的任务。

  1. 创建任务调度
    使用Laravel自带的Artisan命令php artisan make:command来创建一个任务调度类。

示例任务调度类:

<?php

namespace AppConsoleCommands;

use IlluminateConsoleCommand;

class SendEmails extends Command
{
    /**
     * The name and signature of the console command.
     *
     * @var string
     */
    protected $signature = 'emails:send';

    /**
     * The console command description.
     *
     * @var string
     */
    protected $description = 'Send reminder emails to all users';

    /**
     * Execute the console command.
     *
     * @return mixed
     */
    public function handle()
    {
        // 任务调度逻辑
    }
}
  1. 配置任务调度
    在Laravel的配置文件app/Console/Kernel.php中,可以配置要定期执行的任务调度和调度频率。

示例配置:

protected $commands = [
    CommandsSendEmails::class,
];

protected function schedule(Schedule $schedule)
{
    $schedule->command('emails:send')
             ->dailyAt('01:00');
}

上述配置表示每天在凌晨1点执行emails:send

    Exemple de configuration :
  1. * * * * * cd /path-to-your-project && php artisan schedule:run >> /dev/null 2>&1

      Démarrer le travailleur de file d'attente
  2. Dans Laravel, les tâches de file d'attente doivent être exécutées par des travailleurs de file d'attente (Queue Worker). Vous pouvez utiliser la propre commande Artisan de Laravel php artisan queue:work pour démarrer le gestionnaire de file d'attente et le configurer selon vos besoins.

Exemple de commande :

rrreee

Cette commande démarrera un travailleur de file d'attente, écoutera la file d'attente spécifiée (queue-name) et essaiera jusqu'à 3 fois si l'exécution de la tâche échoue.


3. Utilisez la file d'attente Laravel pour traiter les tâches

🎜🎜Créer et distribuer des tâches🎜Tout d'abord, nous devons créer une classe de tâches. Vous pouvez utiliser la propre commande Artisan de Laravel php artisan make:job pour créer une nouvelle classe de tâches de file d'attente. 🎜🎜🎜Exemple de classe de tâches : 🎜rrreee🎜En implémentant l'interface ShouldQueue, cette classe de tâches deviendra une classe de tâches pouvant être traitée par une file d'attente. 🎜🎜Ensuite, nous pouvons utiliser la méthode dispatch de la file d'attente pour distribuer la tâche dans la file d'attente et attendre le traitement asynchrone. 🎜🎜Exemple de tâche de distribution : 🎜rrreee
    🎜Écoutez la file d'attente et exécutez la tâche🎜Lorsque le gestionnaire de file d'attente démarre, il écoute la file d'attente spécifiée, et une fois qu'une nouvelle tâche entre dans la file d'attente, il exécutera la méthode de tâche handle. 🎜🎜🎜Dans la méthode handle de la tâche, écrivez le code logique qui doit être exécuté de manière asynchrone. 🎜🎜Exemple de logique de traitement des tâches : 🎜rrreee🎜Grâce aux étapes ci-dessus, nous pouvons ajouter des tâches qui doivent être exécutées de manière asynchrone à la file d'attente, et les travailleurs de la file d'attente géreront l'exécution. 🎜🎜4. Utilisez la fonction de planification de tâches de Laravel🎜En plus de la fonction de traitement de file d'attente, Laravel fournit également une fonction de planification de tâches, qui peut exécuter une tâche régulièrement ou répéter une tâche un nombre de fois spécifié. 🎜🎜🎜Créer une planification de tâches🎜Utilisez la propre commande Artisan de Laravel php artisan make:command pour créer une classe de planification de tâches. 🎜🎜🎜Exemple de classe de planification de tâches : 🎜rrreee
      🎜Configuration de la planification des tâches🎜Dans le fichier de configuration de Laravel app/Console/Kernel.php, vous pouvez configurer les tâches à exécuter régulièrement Planification des tâches et fréquence de planification. 🎜🎜🎜Exemple de configuration : 🎜rrreee🎜La configuration ci-dessus indique que la tâche emails:send est exécutée à 1h du matin tous les jours. 🎜🎜🎜Démarrez le planificateur de tâches🎜Ajoutez une commande pour exécuter régulièrement le planificateur de tâches Laravel dans la crontab du serveur afin que les tâches planifiées puissent être exécutées régulièrement. 🎜🎜🎜Exemple de commande crontab : 🎜rrreee🎜Grâce aux étapes ci-dessus, nous pouvons exécuter une tâche régulièrement ou répéter une tâche un nombre de fois spécifié, améliorant ainsi l'automatisation et la stabilité de l'application. 🎜🎜Conclusion : 🎜Grâce aux fonctions de traitement de file d'attente et de planification de tâches de Laravel, nous pouvons séparer certaines tâches fastidieuses et répétitives du processus de requête principal, améliorant ainsi les performances et la réactivité de l'application. Dans le même temps, il fournit également des mécanismes de gestion des exceptions et de traitement de tolérance aux pannes pour garantir que les tâches peuvent être exécutées avec succès et assurer la stabilité des applications. J'espère que le contenu de cet article pourra vous aider à mieux utiliser Laravel pour améliorer les performances et la stabilité de votre application. 🎜

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