Maison développement back-end tutoriel php Comment utiliser les files d'attente (Queues) pour traiter les tâches en arrière-plan dans le framework Laravel

Comment utiliser les files d'attente (Queues) pour traiter les tâches en arrière-plan dans le framework Laravel

Jul 28, 2023 pm 12:13 PM
laravel 队列 后台任务

Comment utiliser les files d'attente (Queues) dans le framework Laravel pour traiter les tâches en arrière-plan

Introduction :
À mesure que les applications Web deviennent de plus en plus complexes, nous devons souvent traiter certaines tâches fastidieuses en arrière-plan, telles que l'envoi d'e-mails, d'images traitement, génération de rapports, etc. attendez. Si ces tâches sont effectuées directement pendant le processus de demande, l'expérience utilisateur sera dégradée, voire la demande expirera. Heureusement, le framework Laravel fournit une fonction de file d'attente (Queues) qui peut traiter ces tâches chronophages de manière asynchrone, améliorant ainsi les performances des applications et la vitesse de réponse.

Cet article expliquera comment utiliser les files d'attente (Queues) dans le framework Laravel pour traiter les tâches en arrière-plan, y compris la configuration de la file d'attente, la définition et l'exécution des tâches, etc. Des exemples de code seront également fournis pour démontrer comment ces concepts peuvent être appliqués dans la pratique.

  1. Configuration de la file d'attente
    Tout d'abord, vous devez configurer le pilote de file d'attente dans le fichier de configuration de Laravel. Dans le fichier config/queue.php, l'extrait de code suivant peut être trouvé :
'default' => env('QUEUE_CONNECTION', 'sync'),
Copier après la connexion

Par défaut, le pilote de file d'attente est sync, qui exécute les tâches immédiatement sans utiliser de file d'attente. Nous devons le modifier en fonction du pilote de file d'attente que nous souhaitons utiliser, tel que database, redis, etc. En prenant le pilote database comme exemple, vous devez modifier le code ci-dessus pour : sync,它会立即执行任务而不使用队列。我们需要将其修改为我们想要使用的队列驱动程序,如databaseredis等。以database驱动程序为例,需要将上述代码修改为:

'default' => env('QUEUE_CONNECTION', 'database'),
Copier après la connexion

同时,还需要配置数据库连接信息,以便Laravel可以将队列任务存储在数据库中。继续修改config/database.php文件,找到以下代码片段:

'connections' => [
    'mysql' => [
        'driver' => 'mysql',
        'host' => env('DB_HOST', '127.0.0.1'),
        // ...
    ],
],
Copier après la connexion

在这个代码片段中,需要添加一个新的数据库连接配置项,如下所示:

'connections' => [
    // ...
    'queue' => [
        'driver' => 'mysql',
        'host' => env('DB_HOST', '127.0.0.1'),
        // ...
    ],
],
Copier après la connexion

将上述代码片段中的mysql驱动程序修改为你实际使用的数据库驱动程序,并根据实际情况配置数据库连接信息。

  1. 定义队列任务
    在Laravel框架中,队列任务是通过实现IlluminateContractsQueueShouldQueue接口来定义的。首先,需要创建一个新的队列任务类,例如SendEmailJob
namespace AppJobs;

use IlluminateContractsQueueShouldQueue;
use IlluminateQueueInteractsWithQueue;
use IlluminateQueueSerializesModels;

class SendEmailJob implements ShouldQueue
{
    use InteractsWithQueue, SerializesModels;

    public function __construct()
    {
        //
    }

    public function handle()
    {
        // 处理发送邮件的逻辑
    }
}
Copier après la connexion

在上述代码中,ShouldQueue接口表明这个类是一个队列任务。InteractsWithQueueSerializesModels两个特征可以帮助我们与队列系统进行交互和序列化模型。

handle方法中,我们可以编写具体的任务逻辑。

  1. 分发队列任务
    完成队列任务类的定义后,就可以在应用中分发(dispatch)这些任务了。下面的代码示例演示了如何将SendEmailJob任务分发到队列中:
use AppJobsSendEmailJob;

class SomeController extends Controller
{
    public function sendEmail()
    {
        dispatch(new SendEmailJob());
        // 返回响应或执行其他操作
    }
}
Copier après la connexion

在上述代码中,我们通过dispatch函数将SendEmailJob任务分发到队列中,而不是直接执行。这样可以确保任务在后台异步执行,而不会影响当前请求的响应速度。

  1. 执行队列任务
    最后,我们需要设置任务队列的执行方式。Laravel提供了一个命令行工具php artisan queue:work
    php artisan queue:work
    Copier après la connexion
    En même temps, vous devez également configurer les informations de connexion à la base de données afin que Laravel puisse stocker les tâches de file d'attente dans le base de données. Continuez à modifier le fichier config/database.php et recherchez l'extrait de code suivant : rrreee

    Dans cet extrait de code, vous devez ajouter un nouvel élément de configuration de connexion à la base de données, comme indiqué ci-dessous :

    rrreee

    Remplacez mysql dans le extrait de code ci-dessus Modifiez le pilote avec le pilote de base de données que vous utilisez réellement et configurez les informations de connexion à la base de données en fonction de la situation réelle.

      Définir les tâches de file d'attente

      Dans le framework Laravel, les tâches de file d'attente sont définies en implémentant l'interface IlluminateContractsQueueShouldQueue. Tout d'abord, vous devez créer une nouvelle classe de tâches de file d'attente, telle que SendEmailJob :

      🎜rrreee🎜Dans le code ci-dessus, l'interface ShouldQueue indique que cette classe est une tâche de file d'attente . Les fonctionnalités InteractsWithQueue et SerializesModels peuvent nous aider à interagir avec le système de file d'attente et à sérialiser le modèle. 🎜🎜Dans la méthode handle, nous pouvons écrire une logique de tâche spécifique. 🎜
        🎜Distribuer les tâches de file d'attente🎜Après avoir terminé la définition de la classe de tâches de file d'attente, vous pouvez distribuer (répartir) ces tâches dans l'application. L'exemple de code suivant montre comment distribuer la tâche SendEmailJob à la file d'attente : 🎜🎜rrreee🎜Dans le code ci-dessus, nous transmettons la fonction SendEmailJob via le dispatch<.> fonction >Les tâches sont réparties dans une file d'attente plutôt que exécutées directement. Cela garantit que la tâche est exécutée de manière asynchrone en arrière-plan sans affecter la vitesse de réponse de la requête en cours. 🎜<ol start="4">🎜Exécuter les tâches de la file d'attente🎜Enfin, nous devons définir la méthode d'exécution de la file d'attente des tâches. Laravel fournit un outil de ligne de commande <code>php artisan queue:work pour effectuer des tâches de file d'attente. Exécutez cette commande dans le terminal pour démarrer le traitement des tâches dans la file d'attente. 🎜🎜rrreee🎜De plus, vous pouvez également utiliser des outils tels que Supervisor pour surveiller le processus de file d'attente afin de garantir que les tâches peuvent être exécutées en continu. 🎜🎜Résumé : 🎜L'utilisation de files d'attente (Queues) pour traiter les tâches en arrière-plan dans le framework Laravel est un moyen efficace d'améliorer les performances des applications et la vitesse de réponse. Le traitement asynchrone des tâches en arrière-plan peut être réalisé en configurant des files d'attente, en définissant des tâches de file d'attente, en distribuant des tâches et en exécutant des tâches. 🎜🎜J'espère que cet article pourra aider les lecteurs à comprendre comment utiliser les files d'attente dans le framework Laravel pour gérer les tâches en arrière-plan, et aider les lecteurs à mieux appliquer ces concepts à travers des exemples de code. 🎜

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.

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)

Laravel - Commandes artisanales Laravel - Commandes artisanales Aug 27, 2024 am 10:51 AM

Laravel - Artisan Commands - Laravel 5.7 est livré avec une nouvelle façon de traiter et de tester de nouvelles commandes. Il inclut une nouvelle fonctionnalité de test des commandes artisanales et la démonstration est mentionnée ci-dessous ?

Laravel - Personnalisations de la pagination Laravel - Personnalisations de la pagination Aug 27, 2024 am 10:51 AM

Laravel - Personnalisations de pagination - Laravel inclut une fonctionnalité de pagination qui aide un utilisateur ou un développeur à inclure une fonctionnalité de pagination. Le paginateur Laravel est intégré au générateur de requêtes et à Eloquent ORM. La méthode paginate automatique

Comment obtenir le code de retour lorsque l'envoi par e-mail échoue à Laravel? Comment obtenir le code de retour lorsque l'envoi par e-mail échoue à Laravel? Apr 01, 2025 pm 02:45 PM

Méthode pour obtenir le code de retour lorsque l'envoi par e-mail de Laravel échoue. Lorsque vous utilisez Laravel pour développer des applications, vous rencontrez souvent des situations où vous devez envoyer des codes de vérification. Et en réalité ...

La tâche de calendrier Laravel n'est pas exécutée: que dois-je faire si la tâche n'est pas en cours d'exécution après le calendrier: Exécuter la commande? La tâche de calendrier Laravel n'est pas exécutée: que dois-je faire si la tâche n'est pas en cours d'exécution après le calendrier: Exécuter la commande? Mar 31, 2025 pm 11:24 PM

Laravel Schedule Tâche d'exécution de dépannage non réactif Lorsque vous utilisez la planification des tâches de calendrier de Laravel, de nombreux développeurs rencontreront ce problème: Schedule: Exécuter ...

Dans Laravel, comment gérer la situation où les codes de vérification ne sont pas envoyés par e-mail? Dans Laravel, comment gérer la situation où les codes de vérification ne sont pas envoyés par e-mail? Mar 31, 2025 pm 11:48 PM

La méthode de traitement de l'échec de l'e-mail de Laravel à envoyer le code de vérification est d'utiliser Laravel ...

Comment implémenter la fonction de table personnalisée de clic pour ajouter des données dans l'administrateur DCAT? Comment implémenter la fonction de table personnalisée de clic pour ajouter des données dans l'administrateur DCAT? Apr 01, 2025 am 07:09 AM

Comment implémenter la fonction du tableau de Cliquez sur personnalisé pour ajouter des données dans DCATADMIN (Laravel-Admin) lors de l'utilisation de DCAT ...

Laravel - Serveur de vidage Laravel - Serveur de vidage Aug 27, 2024 am 10:51 AM

Laravel - Dump Server - Le serveur de dump Laravel est livré avec la version de Laravel 5.7. Les versions précédentes n'incluent aucun serveur de dump. Le serveur de vidage sera une dépendance de développement dans le fichier laravel/laravel composer.

Partage de connexion Laravel Redis: pourquoi la méthode de sélection affecte-t-elle d'autres connexions? Partage de connexion Laravel Redis: pourquoi la méthode de sélection affecte-t-elle d'autres connexions? Apr 01, 2025 am 07:45 AM

L'impact du partage des connexions redis dans Laravel Framework et sélectionnez Méthodes Lors de l'utilisation de Laravel Framework et Redis, les développeurs peuvent rencontrer un problème: grâce à la configuration ...

See all articles