Qu’est-ce qu’une queue
Dans une application web, l’envoi de mails, le redimensionnement d’images ou les appels d’API externes peuvent prendre plusieurs secondes. Traiter cela de manière synchrone dans une requête HTTP fait attendre l’utilisateur inutilement. Les queues Laravel exécutent ces tâches en arrière-plan : la requête retourne immédiatement une réponse, et un worker traite le job à part.Backends supportés : base de données, Redis, Amazon SQS…
En dev, le driver
sync exécute les jobs immédiatement, sans queue.Configuration
config/queue.php
.env
Préparer le driver database
database nécessite une table jobs. Sous Laravel 11+, la migration est incluse ; sinon :
Préparer le driver Redis
Configurez la connexion Redis dansconfig/database.php puis installez :
Overflow storage SQS
Amazon SQS limite la taille de payload. Pour de gros payloads, redirigez l’excédent vers un cache et n’envoyez qu’un pointeur.enabled: payloads ≥ 1 Mo → cache.always: true: toujours passer par le cache.delete_after_processing: nettoie le cache après succès (truepar défaut).flush_on_clear: true:queue:clearpurge le cache d’overflow. À combiner avec un store dédié pour ne pas vider le cache général.
Créer une classe de job
Commande make:job
app/Jobs/SendWelcomeEmail.php est créé.
Structure
ShouldQueue indique un traitement asynchrone. Le trait Queueable fournit les méthodes nécessaires.
Dispatch
dispatch()
Dispatch différé
dispatchAfterResponse()
Exécute le job après l’envoi de la réponse HTTP. Fonctionne aussi en sync — idéal pour du léger sans worker.
Vers une queue précise
Routing de queue
Pour rediriger par défaut certaines classes vers une connexion/queue précise, utilisezQueue::route() dans boot().
Un
onQueue() / onConnection() explicite sur le job prime sur le routing.Sync (dev/tests)
dispatchSync() exécute immédiatement, sans queue.
Bulk dispatch
Pour envoyer beaucoup de jobs indépendants d’un coup sans tracking :Bus::bulk().
Bus::bulk() groupe les jobs par connexion/queue et les envoie par lot. Contrairement à Bus::batch(), pas de suivi ni de callback.Traiter les jobs
queue:work
Options de supervision
Retry paramétré côté job
Souvent plus lisible que la CLI.Libération de job (middleware Release)
Pour renvoyer le job dans la queue sans l’exécuter, sous condition, utilisez le middlewareRelease.
Release::unless() libère si la condition est false.
Jobs échoués
Table failed_jobs
Après épuisement des tentatives, le job est stocké dans failed_jobs.
Cleanup à l’échec
Définissezfailed() sur le job.
Arrêter les retries par type d’exception
UtilisezdontRetry dans withExceptions() (fichier bootstrap/app.php).
Lister les échecs
Retry
Suppression
Drivers courants
database
Simple à mettre en place, utilise la RDBMS existante.
- Avantages : setup rapide, sans dépendance
- Inconvénients : lourd pour de gros volumes
redis
Driver rapide, très utilisé en production. Débit supérieur.
- Avantages : rapide, scalable
- Inconvénients : nécessite Redis
Supervisor en production
Sous Linux, faites tournerqueue:work en continu avec Supervisor.
numprocs=2 démarre 2 workers en parallèle. Rechargez Supervisor :
Exemple : envoi d’e-mail en queue
1
Créer le job
2
Implémenter
3
Dispatcher depuis un contrôleur
4
Démarrer un worker
Récapitulatif
Quand utiliser une queue
Quand utiliser une queue
- Envoi de mails / SMS
- Redimensionnement d’images / vidéos
- Appels d’API externes
- Génération de rapports / exports CSV
- Envoi de webhooks
Astuce en dev
Astuce en dev
QUEUE_CONNECTION=sync dans .env exécute immédiatement — pas besoin de worker pour tester.Commandes fréquentes
Commandes fréquentes