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, ], ], ],
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);
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)); } }
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
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 :
[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
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!