Laravel Horizon : Surveillance et gestion puissantes des files d'attente Redis en PHP
Dans le développement web moderne en PHP, le traitement asynchrone des tâches via des files d'attente est devenu un standard de facto. Laravel offre un support intégré pour les files d'attente, mais lorsque le projet grandit, gérer des dizaines de workers, suivre leurs performances et diagnostiquer les problèmes devient complexe. C'est là qu'intervient Laravel Horizon, un outil puissant pour la surveillance et la gestion des files d'attente Redis.
Horizon n'est pas qu'un simple tableau de bord. C'est un système complet de gestion des files d'attente qui fournit une interface web élégante pour suivre tous les aspects du fonctionnement des files : nombre de tâches traitées, temps d'exécution, nombre d'erreurs, statut des workers et bien plus encore. Contrairement à l'approche standard où vous lancez les workers manuellement, Horizon les gère automatiquement, répartissant la charge entre plusieurs processus et les équilibrant en fonction de la charge actuelle.
L'avantage clé d'Horizon est son intégration avec Redis. Il utilise Redis non seulement comme pilote de file d'attente, mais aussi comme stockage pour les métriques et l'état des workers. Cela le rend incroyablement rapide et scalable. Vous pouvez exécuter Horizon sur plusieurs serveurs, et il collectera les données de tous les workers dans un tableau de bord unifié. C'est la solution idéale pour un environnement de production où chaque milliseconde compte.
Installation
L'installation d'Horizon se fait via Composer, le gestionnaire de paquets standard pour PHP. Assurez-vous d'avoir Composer installé et que votre projet utilise Laravel 5.5 ou supérieur.
composer require laravel/horizon
Après l'installation du paquet, vous devez publier ses fichiers de configuration et ses assets :
php artisan horizon:install
Cette commande crée le fichier de configuration config/horizon.php et enregistre le fournisseur de services Horizon. Un fichier de routes routes/horizon.php est également créé si vous utilisez Laravel 8+.
Ensuite, ajoutez le fournisseur dans config/app.php (s'il n'a pas été ajouté automatiquement) :
'providers' => [
// Autres fournisseurs...
App\Providers\HorizonServiceProvider::class,
],
Après cela, lancez les migrations pour créer les tables nécessaires au fonctionnement d'Horizon (bien que la logique principale utilise Redis, certaines données sont stockées en base de données) :
php artisan migrate
Enfin, configurez Redis. Assurez-vous que le serveur Redis est installé et en cours d'exécution, et que les paramètres de connexion corrects sont définis dans le fichier .env :
REDIS_HOST=127.0.0.1
REDIS_PASSWORD=null
REDIS_PORT=6379
Démarrage rapide : exemple minimal fonctionnel
Après l'installation et la configuration, vous pouvez lancer Horizon immédiatement et le voir en action.
Étape 1 : Lancez Horizon
Dans le terminal, exécutez la commande :
php artisan horizon
Vous verrez Horizon lancer plusieurs processus workers. Par défaut, il crée trois processus pour traiter les tâches de la file d'attente default.
Étape 2 : Créez une tâche pour la file d'attente
Créons une tâche simple qui simule une opération longue :
<?php
namespace App\Jobs;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Queue\SerializesModels;
class ProcessPodcast implements ShouldQueue
{
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
protected $podcastId;
public function __construct($podcastId)
{
$this->podcastId = $podcastId;
}
public fun Aussi dans la bibliothèque
AssertJ pour Java : guide complet avec exemples
Chai pour JavaScript (Node.js) : guide complet avec exemples
Géolocalisation et cartes en Go (Golang) : bibliothèques et exemples