Il y a quelques temps de cela, nous avions évoqué l'utilisation des files d'attente au sein du framework laravel. Ce système, permet de mettre en place un traitement différé pour les tâches "lourdes". En revanche, la gestion de ces-dernières était relativement sommaire et on se contentait d'exécuter une commande sans forcément avoir de retour sur l'éxécution et le traitement des tâches.
Laravel Horizon permet de remédier à ce problème en offrant un dashboard pour gérer les files d'attente.
Installation
L'installation de Laravel Horizon se fait facilement grâce à l'utilisation de composer et de la commande artisan.
composer require laravel/horizon
php artisan vendor:publish --provider="Laravel\Horizon\HorizonServiceProvider"
Une fois cette installation effectuée vous pouvez consulter votre dashboard horizon depuis votre application avec l'URL /horizon
. Vous pouvez limiter l'accès à ce dashboard pour certains utilisateurz en utilisant la méthode auth
d'Horizon dans la méthode boot
de votre AppServiceProvider
.
Horizon::auth(function ($request) {
// return true ou false
return $request->user() && $request->user()->role === 'admin';
});
Traitement de la file d'attente
Pour traiter la file d'attente il suffit de lancer la commande
php artisan horizon
Cette commande va lancer l'outil qui écoutera la file d'attente Redis et qui éxécutera les tâches. Vous pouvez suivre la progression du traitement depuis le dashboard Horizon. Vous pouvez aussi configurer le traitement de vos files d'attente via le fichier de configuration horizon.php
.
Lors du déploiement de votre application il vous faudra utiliser supervisor afin de maintenir le processus lancé.
[program:horizon]
process_name=%(program_name)s
command=php /home/forge/app.com/artisan horizon
autostart=true
autorestart=true
user=forge
redirect_stderr=true
stdout_logfile=/home/forge/app.com/horizon.log
En revanche, si votre code change, il faudra penser à redémarrer le traitement de la file d'attente afin de prendre en compte la dernière version de votre code source.
Pour le reste, n'hésitez pas à faire un tour sur la documentation pour voir tout ce qu'Horizon a à offrir.