Maison cadre php Laravel Files d'attente Laravel et planificateur de tâches : traitement simultané d'un grand nombre de tâches

Files d'attente Laravel et planificateur de tâches : traitement simultané d'un grand nombre de tâches

Aug 13, 2023 am 09:51 AM
- laravel队列 - 任务调度器 - 并发处理

Files dattente Laravel et planificateur de tâches : traitement simultané dun grand nombre de tâches

Laravel Queue and Task Scheduler : traitement simultané d'un grand nombre de tâches

Dans le développement d'applications Web modernes, il existe souvent des scénarios dans lesquels un grand nombre de tâches doivent être traitées. Par exemple, envoyer des e-mails, générer des rapports, traiter du Big Data, etc. Mais lorsque la charge de travail est très importante, une seule requête pour traiter ces tâches peut entraîner un retard trop long de la requête ou un épuisement des ressources système. Afin de résoudre ce problème, Laravel fournit des fonctions de file d'attente et de planificateur de tâches, qui peuvent traiter un grand nombre de tâches simultanément.

1. Laravel Queue

La file d'attente est un mécanisme qui pousse les tâches en arrière-plan pour un traitement asynchrone, notre application peut traiter des opérations fastidieuses en arrière-plan sans affecter la vitesse de réponse aux demandes de l'utilisateur.

Dans Laravel, nous pouvons utiliser diverses méthodes pour implémenter des fonctions de file d'attente, telles que la file d'attente de base de données, la file d'attente Redis, la file d'attente Beanstalkd, etc. Ici, nous prenons une file d'attente de base de données comme exemple pour montrer comment implémenter la fonction de tâches de traitement simultanées.

  1. Configuration du pilote de file d'attente

Tout d'abord, nous devons configurer le pilote de file d'attente dans le fichier de configuration de Laravel config/queue.php. Nous choisissons d'utiliser la file d'attente de la base de données, définissons l'option connection sur database et définissons certaines configurations liées à la connexion à la base de données. config/queue.php中配置队列驱动。我们选择使用数据库队列,将connection选项设置为database,以及设置一些数据库连接的相关配置。

'default' => env('QUEUE_CONNECTION', 'database'),
'connections' => [
    'database' => [
        'driver' => 'database',
        'table' => 'jobs',
        'queue' => 'default',
        'retry_after' => 90,
    ],
],
Copier après la connexion

2.创建队列表

接下来,我们需要创建一个用于存储队列任务的数据表。可以使用Laravel提供的Artisan命令php artisan queue:table快速生成迁移文件,并执行迁移。

php artisan queue:table
php artisan migrate
Copier après la connexion
  1. 创建任务类

然后,我们需要创建一个任务类,用于处理具体的任务逻辑。在Laravel中,任务类一般放在app/Jobs目录下,可以通过Artisan命令php artisan make:job快速生成一个任务类。

php artisan make:job SendEmail
Copier après la connexion

生成的任务类SendEmail位于app/Jobs目录下,我们可以在该类的handle方法中编写任务逻辑。

<?php

namespace AppJobs;

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

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

    /**
     * Execute the job.
     *
     * @return void
     */
    public function handle()
    {
        // 处理发送邮件的逻辑
        // ...
    }
}
Copier après la connexion

在任务类中,我们需要实现ShouldQueue接口,并定义handle方法来处理任务逻辑。

  1. 推送任务到队列

最后,我们可以通过以下代码将任务推送到队列中。

use AppJobsSendEmail;

SendEmail::dispatch();
Copier après la connexion

通过dispatch方法将任务加入到队列中,系统会自动根据配置选择相应的队列驱动进行处理。

二、Laravel任务调度器

Laravel还提供了一个任务调度器的功能,可以将任务设置为定时执行或者周期性执行。我们可以通过任意的Laravel自带的时间表(Laravel Time Scheduling)来设置任务的执行规则。

  1. 定义任务调度

首先,我们需要在app/Console/Kernel.php文件的schedule方法中定义任务调度。例如,我们定义一个每分钟执行一次的任务。

protected function schedule(Schedule $schedule)
{
    $schedule->job(new SendEmail)->everyMinute();
}
Copier après la connexion

在上述代码中,我们使用了任务类SendEmail作为调度的执行体,然后通过everyMinute方法设置任务执行频率为每分钟一次。

  1. 初始化任务调度

任务调度定义成功之后,我们需要在服务器上设置一个Cron表达式以便执行任务调度。

在Linux系统上,可以通过crontab命令来编辑和设置Cron表达式。

crontab -e
Copier après la connexion

然后,在打开的文件中加入以下代码:

* * * * * php /path/to/artisan schedule:run >> /dev/null 2>&1
Copier après la connexion

上述代码表示每分钟执行一次php artisan schedule:runrrreee

2. Créer une table de file d'attente

Ensuite, nous devons créer une table de données pour stocker les tâches de file d'attente. Vous pouvez utiliser la commande Artisan php artisan queue:table fournie par Laravel pour générer rapidement des fichiers de migration et effectuer la migration.

rrreee

    Créer une classe de tâches

    Ensuite, nous devons créer une classe de tâches pour gérer une logique de tâche spécifique. Dans Laravel, les classes de tâches sont généralement placées dans le répertoire app/Jobs. Vous pouvez générer rapidement une classe de tâches via la commande Artisan php artisan make:job.

    rrreee🎜La classe de tâches générée SendEmail se trouve dans le répertoire app/Jobs Nous pouvons écrire la logique des tâches dans la méthode handle de cette classe. . 🎜rrreee🎜Dans la classe de tâches, nous devons implémenter l'interface ShouldQueue et définir la méthode handle pour gérer la logique de la tâche. 🎜
      🎜Pousser la tâche vers la file d'attente🎜🎜🎜Enfin, nous pouvons pousser la tâche vers la file d'attente via le code suivant. 🎜rrreee🎜Ajoutez la tâche à la file d'attente via la méthode dispatch, et le système sélectionnera automatiquement le pilote de file d'attente correspondant pour le traitement en fonction de la configuration. 🎜🎜2. Laravel Task Scheduler🎜🎜Laravel fournit également une fonction de planificateur de tâches, qui peut définir des tâches à exécuter régulièrement ou périodiquement. Nous pouvons définir des règles d'exécution des tâches via n'importe lequel des propres plannings de Laravel (Laravel Time Scheduling). 🎜🎜🎜Définir la planification des tâches🎜🎜🎜Tout d'abord, nous devons définir la planification des tâches dans la méthode schedule du fichier app/Console/Kernel.php. Par exemple, nous définissons une tâche qui est exécutée toutes les minutes. 🎜rrreee🎜Dans le code ci-dessus, nous utilisons la classe de tâches SendEmail comme corps d'exécution du planning, puis définissons la fréquence d'exécution de la tâche à une fois par minute via everyMinute méthode. 🎜
        🎜Initialiser la planification des tâches🎜🎜🎜Une fois la planification des tâches définie avec succès, nous devons définir une expression Cron sur le serveur pour effectuer la planification des tâches. 🎜🎜Sur les systèmes Linux, vous pouvez modifier et définir des expressions Cron via la commande crontab. 🎜rrreee🎜Ensuite, ajoutez le code suivant au fichier ouvert : 🎜rrreee🎜Le code ci-dessus signifie que la commande php artisan planning:run sera exécutée toutes les minutes, ce qui déclenchera la planification des tâches. 🎜🎜Grâce à la configuration ci-dessus, nous pouvons réaliser la fonction d'exécution planifiée et d'exécution périodique des tâches. 🎜🎜Résumé : 🎜🎜Grâce aux fonctions de file d'attente Laravel et de planificateur de tâches, nous pouvons facilement réaliser la nécessité de traiter un grand nombre de tâches simultanément. La file d'attente peut pousser les tâches en arrière-plan pour un traitement asynchrone afin d'éviter de bloquer les demandes des utilisateurs. Le planificateur de tâches permet à nos tâches d'être exécutées régulièrement ou périodiquement selon des règles de temps, améliorant ainsi l'efficacité du traitement des tâches. 🎜🎜Ce qui précède est une introduction à la file d'attente et au planificateur de tâches Laravel. J'espère que cela sera utile à tout le monde ! 🎜

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 de ce site Web
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

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Comment réparer l'audio si vous n'entendez personne
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Comment déverrouiller tout dans Myrise
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Comment utiliser les composants de Laravel pour créer des éléments d'interface utilisateur réutilisables? Comment utiliser les composants de Laravel pour créer des éléments d'interface utilisateur réutilisables? Mar 17, 2025 pm 02:47 PM

L'article discute de la création et de la personnalisation des éléments d'interface utilisateur réutilisables dans Laravel à l'aide de composants, offrant les meilleures pratiques pour l'organisation et suggérant des packages améliorant.

Comment mettre en œuvre l'authentification et l'autorisation OAuth2 dans Laravel? Comment mettre en œuvre l'authentification et l'autorisation OAuth2 dans Laravel? Mar 12, 2025 pm 05:56 PM

Cet article détaille la mise en œuvre d'authentification et d'autorisation OAuth 2.0 dans Laravel. Il couvre à l'aide de packages comme les solutions de ligue / oauth2-serveur ou spécifiques au fournisseur, mettant l'accent sur la configuration de la base de données, l'enregistrement du client, la configuration du serveur d'autorisation

Quelles sont les meilleures pratiques pour utiliser Laravel dans un environnement natif du cloud? Quelles sont les meilleures pratiques pour utiliser Laravel dans un environnement natif du cloud? Mar 14, 2025 pm 01:44 PM

L'article traite des meilleures pratiques pour déployer Laravel dans des environnements natifs du cloud, en se concentrant sur l'évolutivité, la fiabilité et la sécurité. Les problèmes clés incluent la conteneurisation, les microservices, la conception sans état et les stratégies d'optimisation.

Comment créer et utiliser des directives de lame personnalisées à Laravel? Comment créer et utiliser des directives de lame personnalisées à Laravel? Mar 17, 2025 pm 02:50 PM

L'article discute de la création et de l'utilisation des directives de lame personnalisées à Laravel pour améliorer les modèles. Il couvre la définition des directives, les utilisant dans des modèles et les gérer dans de grands projets, mettant en évidence des avantages tels que l'amélioration de la réutilisabilité du code et R

Comment puis-je créer et utiliser des règles de validation personnalisées dans Laravel? Comment puis-je créer et utiliser des règles de validation personnalisées dans Laravel? Mar 17, 2025 pm 02:38 PM

L'article discute de la création et de l'utilisation de règles de validation personnalisées dans Laravel, offrant des étapes pour les définir et les mettre en œuvre. Il met en évidence des avantages tels que la réutilisabilité et la spécificité et fournit des méthodes pour étendre le système de validation de Laravel.

Quelles sont les meilleures façons de gérer les téléchargements de fichiers et le stockage cloud dans Laravel? Quelles sont les meilleures façons de gérer les téléchargements de fichiers et le stockage cloud dans Laravel? Mar 12, 2025 pm 05:54 PM

Cet article explore des stratégies optimales de téléchargement de fichiers et de stockage cloud dans Laravel. Il examine le stockage local vs fournisseurs de cloud (AWS S3, Google Cloud, Azure, DigitalOcean), mettant l'accent sur la sécurité (validation, désinfection, HTTPS) et Performance Opti

Comment utiliser la console artisanale de Laravel pour automatiser les tâches courantes? Comment utiliser la console artisanale de Laravel pour automatiser les tâches courantes? Mar 17, 2025 pm 02:39 PM

La console artisanale de Laravel automatise des tâches comme la génération de code, l'exécution de migrations et la planification. Les commandes clés incluent la marque: contrôleur, migrer et db: graines. Les commandes personnalisées peuvent être créées pour des besoins spécifiques, améliorant l'efficacité du flux de travail.

Comment puis-je utiliser les fonctionnalités de routage de Laravel pour créer des URL adaptées au référencement? Comment puis-je utiliser les fonctionnalités de routage de Laravel pour créer des URL adaptées au référencement? Mar 17, 2025 pm 02:43 PM

L'article discute de l'utilisation du routage de Laravel pour créer des URL conviviales, couvrant les meilleures pratiques, des URL canoniques et des outils pour l'optimisation du référencement. Nombre de mots: 159

See all articles