


Files d'attente Laravel et planificateur de tâches : traitement simultané d'un 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.
- 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, ], ],
2.创建队列表
接下来,我们需要创建一个用于存储队列任务的数据表。可以使用Laravel提供的Artisan命令php artisan queue:table
快速生成迁移文件,并执行迁移。
php artisan queue:table php artisan migrate
- 创建任务类
然后,我们需要创建一个任务类,用于处理具体的任务逻辑。在Laravel中,任务类一般放在app/Jobs
目录下,可以通过Artisan命令php artisan make:job
快速生成一个任务类。
php artisan make:job SendEmail
生成的任务类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() { // 处理发送邮件的逻辑 // ... } }
在任务类中,我们需要实现ShouldQueue
接口,并定义handle
方法来处理任务逻辑。
- 推送任务到队列
最后,我们可以通过以下代码将任务推送到队列中。
use AppJobsSendEmail; SendEmail::dispatch();
通过dispatch
方法将任务加入到队列中,系统会自动根据配置选择相应的队列驱动进行处理。
二、Laravel任务调度器
Laravel还提供了一个任务调度器的功能,可以将任务设置为定时执行或者周期性执行。我们可以通过任意的Laravel自带的时间表(Laravel Time Scheduling)来设置任务的执行规则。
- 定义任务调度
首先,我们需要在app/Console/Kernel.php
文件的schedule
方法中定义任务调度。例如,我们定义一个每分钟执行一次的任务。
protected function schedule(Schedule $schedule) { $schedule->job(new SendEmail)->everyMinute(); }
在上述代码中,我们使用了任务类SendEmail
作为调度的执行体,然后通过everyMinute
方法设置任务执行频率为每分钟一次。
- 初始化任务调度
任务调度定义成功之后,我们需要在服务器上设置一个Cron表达式以便执行任务调度。
在Linux系统上,可以通过crontab
命令来编辑和设置Cron表达式。
crontab -e
然后,在打开的文件中加入以下代码:
* * * * * php /path/to/artisan schedule:run >> /dev/null 2>&1
上述代码表示每分钟执行一次php artisan schedule:run
rrreee
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
.
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!

Outils d'IA chauds

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

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

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

AI Hentai Generator
Générez AI Hentai gratuitement.

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

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

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.

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

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.

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

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.

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

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.

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
