Maison > cadre php > Laravel > Développement Laravel : Comment utiliser les files d'attente Laravel pour gérer des tâches asynchrones ?

Développement Laravel : Comment utiliser les files d'attente Laravel pour gérer des tâches asynchrones ?

WBOY
Libérer: 2023-06-13 14:23:36
original
1322 Les gens l'ont consulté

Développement Laravel : Comment utiliser Laravel Queues pour gérer des tâches asynchrones ?

Laravel est un framework PHP populaire dont les fonctionnalités puissantes en font le meilleur choix pour le développement d'applications Web. Grâce à Laravel, vous pouvez créer des applications Web complexes rapidement et facilement. Dans cet article, nous discuterons de l'utilisation de Laravel Queues, une fonctionnalité qui aide à gérer les tâches asynchrones.

Le concept de tâches asynchrones

Lorsqu'un utilisateur effectue une tâche dans une application web, il doit attendre que la tâche soit terminée avant d'obtenir le résultat. C'est la tâche de synchronisation. Mais que se passe-t-il si nous voulons le traiter sans que l’utilisateur ait à attendre la fin de la tâche ? C'est une tâche asynchrone !

Les tâches asynchrones n'affectent pas les performances de réponse en temps réel de l'utilisateur car ils n'attendent pas la fin de la tâche avant de renvoyer les résultats. Au lieu de cela, ces tâches sont placées dans une file d’attente et traitées une par une en arrière-plan. Par exemple, un utilisateur télécharge un fichier sur le serveur. Si un téléchargement prend trop de temps parce que le fichier est trop volumineux, les utilisateurs peuvent s'impatienter et annuler le téléchargement. À ce stade, l’utilisation de tâches asynchrones permettra d’éviter le désabonnement des utilisateurs.

Laravel Queues fait partie du framework Laravel qui aide à gérer les tâches asynchrones.

Création de files d'attente Laravel

La première étape de l'utilisation des files d'attente dans Laravel consiste à indiquer à l'ordinateur quelle file d'attente doit être traitée. Dans le fichier Queue.php, vous pouvez définir la file d'attente et spécifier le pilote qu'elle utilise. Les pilotes peuvent être des pilotes locaux, des pilotes de base de données, des pilotes Redis, des pilotes Beanstalk, etc. Voici un exemple :

'connection' => env('QUEUE_DRIVER', 'sync'),

'driver' => env('QUEUE_DRIVER', 'sync'),

'queue' => [

    'default' => [

        'connection' => 'default',

        'queue' => 'default',

        'retry_after' => 90,

        'backoff' => [

            'strategy' => 'exponential',

            'max_attempts' => 3,

            'delay' => 1000,

        ],

    ],

],
Copier après la connexion

L'exemple de code ci-dessus montre que la file d'attente utilise le pilote 'sync' par défaut. Cependant, vous pouvez définir différents pilotes dans le fichier .env.

Ajouter une file d'attente

Maintenant que nous avons défini la file d'attente et son pilote, nous devons ajouter des tâches à la file d'attente pour traitement. Dans le framework Laravel, les tâches sont ajoutées à la file d'attente à l'aide de la méthode dispatch(). Par exemple, nous utilisons le code suivant pour ajouter une tâche à la file d'attente :

ProcessPodcasts::dispatch($podcast);
Copier après la connexion

Dans le code ci-dessus, ProcessPodcasts est la tâche que nous voulons exécuter et $podcast est le paramètre passé à la tâche.

Créer une tâche

Maintenant, créons une tâche asynchrone à l'aide de Laravel. Pour ce faire, nous allons créer un nouveau fichier Job.php dans le répertoire app/Jobs. Voici l'exemple de code :

<?php

namespace AppJobs;

use AppMailSendWelcomeEmail;
use AppUser;
use IlluminateBusQueueable;
use IlluminateContractsQueueShouldQueue;
use IlluminateFoundationBusDispatchable;
use IlluminateQueueInteractsWithQueue;
use IlluminateQueueSerializesModels;
use IlluminateSupportFacadesMail;

class SendWelcomeEmailJob implements ShouldQueue
{
    // Traits used by the class
    use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;

    protected $user;

    /**
     * Create a new job instance.
     *
     * @param User $user
     */
    public function __construct(User $user)
    {
        $this->user = $user;
    }

    /**
     * Execute the job.
     *
     * @return void
     */
    public function handle()
    {
        Mail::to($this->user->email)->send(new SendWelcomeEmail($this->user));
    }
}
Copier après la connexion

Le code ci-dessus crée une tâche asynchrone nommée SendWelcomeEmailJob. Cette tâche envoie un e-mail à un nouvel utilisateur. La tâche étant dans la file d’attente, l’utilisateur n’a pas besoin d’attendre la fin de l’envoi de l’e-mail.

File d'attente d'exécution

Avec les opérations ci-dessus, nous avons créé une tâche et l'avons ajoutée à la file d'attente. Cependant, nous devons exécuter les tâches dans la file d'attente. Il existe plusieurs façons d'exécuter une file d'attente, voici l'exemple de code :

php artisan queue:work 
Copier après la connexion

Dans le code ci-dessus, nous exécutons la file d'attente à l'aide de la commande queue:work dans Laravel CLI. Cette commande continuera à s'exécuter jusqu'à ce qu'il n'y ait plus de tâches à traiter.

Il existe d'autres façons d'exécuter des files d'attente, comme l'exécution de files d'attente avec l'aide d'un superviseur. Supervisor est un outil de gestion de processus qui nous permet de gérer les applications Laravel en arrière-plan. Pour exécuter des files d'attente avec l'aide du superviseur, veuillez suivre ces étapes :

  1. Installer le superviseur (veuillez vous référer à l'utilisation du superviseur).
  2. Créez un nouveau fichier queue-worker.conf situé dans le répertoire /etc/supervisor/conf.d.
  3. Entrez le code suivant :
[program:queue-worker]

process_name=%(program_name)s_%(process_num)02d

command=php /path/to/artisan queue:work 

autostart=true

autorestart=true

user=user

numprocs=1

redirect_stderr=true

stdout_logfile=/path/to/your/logs/queue-worker.log
Copier après la connexion

Le code ci-dessus crée un travailleur de file d'attente pour le superviseur. Lorsque le superviseur démarre, ce programme commencera à traiter la file d'attente et s'exécutera en arrière-plan.

Conclusion

Dans cet article, nous avons appris à utiliser les files d'attente Laravel pour le traitement des tâches asynchrones. Nous avons découvert le concept de file d'attente et défini de nouvelles files d'attente et de nouveaux pilotes. Nous avons également créé une tâche asynchrone et vu comment l'exécuter à l'aide de Laravel Queues. Dans l'ensemble, les files d'attente Laravel sont un composant très utile dans le développement de Laravel, qui peut nous aider à gérer facilement les tâches asynchrones.

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!

Étiquettes associées:
source:php.cn
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal