🚀 Automatiser les tâches avec Laravel Queues et Jobs
Dans une application Laravel, certaines tâches peuvent être longues et gourmandes en ressources :
✅ Envoi d’e-mails 📧
✅ Génération de rapports 📊
✅ Traitement de fichiers 📂
✅ Notifications en arrière-plan 🔔
Pour éviter que ces opérations ne bloquent le chargement de tes pages, Laravel Queues permet d’exécuter ces tâches en arrière-plan. 🎯
Dans cet article, nous allons voir comment utiliser Laravel Queues et Jobs pour automatiser ces tâches efficacement.
1️⃣ Comprendre Laravel Queues et Jobs
🛠️ Que sont les Jobs et les Queues ?
🔹 Job : Un job (ou tâche) est une classe qui contient du code à exécuter en arrière-plan.
🔹 Queue : Une file d’attente (queue) stocke les jobs et les exécute plus tard, de manière asynchrone.
📌 Pourquoi utiliser les queues ?
✅ Améliore la rapidité de l’application.
✅ Évite les blocages sur les requêtes longues.
✅ Optimise les performances en répartissant la charge.
2️⃣ Configuration des Queues dans Laravel
Laravel propose plusieurs drivers de queue :
- sync → Exécution immédiate (pas en arrière-plan).
- database → Stocke les jobs dans la base de données.
- redis → Haute performance (nécessite Redis).
- sqs → Utilise Amazon SQS pour les tâches distribuées.
🔹 Modifier la configuration
Dans .env
, configure le driver des queues :
envCopierModifierQUEUE_CONNECTION=database # Ou redis, sqs...
Dans config/queue.php
, assure-toi que la connexion correspond à celle choisie.
3️⃣ Création et gestion des Jobs
📝 Créer un Job
Exécute la commande suivante :
bashCopierModifierphp artisan make:job SendEmailJob
Cela génère un fichier dans app/Jobs/SendEmailJob.php
.
📌 Exemple de Job qui envoie un e-mail :
phpCopierModifiernamespace App\Jobs;
use Mail;
use App\Mail\WelcomeEmail;
use Illuminate\Bus\Queueable;
use Illuminate\Queue\SerializesModels;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Contracts\Queue\ShouldQueue;
class SendEmailJob implements ShouldQueue
{
use Queueable, SerializesModels, InteractsWithQueue;
protected $user;
public function __construct($user)
{
$this->user = $user;
}
public function handle()
{
Mail::to($this->user->email)->send(new WelcomeEmail($this->user));
}
}
✅ Ce Job sera exécuté en arrière-plan sans ralentir l’application !
4️⃣ Dispatcher un Job dans la Queue
Après avoir créé le Job, il faut le dispatcher (l’envoyer en attente).
📌 Envoyer un Job dans la queue :
phpCopierModifieruse App\Jobs\SendEmailJob;
use App\Models\User;
$user = User::find(1);
dispatch(new SendEmailJob($user));
✅ Laravel va enregistrer le Job et l’exécuter plus tard !
📌 Envoyer un Job avec un délai :
phpCopierModifierdispatch(new SendEmailJob($user))->delay(now()->addMinutes(5));
✅ Cela attendra 5 minutes avant d’exécuter le Job !
5️⃣ Exécuter les Queues avec un Worker
📌 Lancer le Worker pour traiter les tâches en attente :
bashCopierModifierphp artisan queue:work
✅ Laravel va maintenant exécuter les tâches en file d’attente 🚀
📌 Lancer le Worker en mode daemon (recommandé pour la prod) :
bashCopierModifierphp artisan queue:work --daemon
✅ Cela permet de ne pas redémarrer le Worker à chaque tâche.
6️⃣ Utiliser les Queues avec Redis (Optionnel mais puissant)
Pourquoi Redis ?
- 📌 Plus rapide que la base de données
- 📌 Meilleure gestion des files d’attente
- 📌 Idéal pour les applications à forte charge
🛠️ Étape 1 : Installer Redis
Si Redis n’est pas installé, utilise :
bashCopierModifiercomposer require predis/predis
Puis change .env
:
envCopierModifierQUEUE_CONNECTION=redis
🛠️ Étape 2 : Lancer le Worker Redis
bashCopierModifierphp artisan queue:work redis
✅ Ton application peut maintenant gérer des milliers de jobs efficacement !
7️⃣ Superviser et relancer les jobs échoués
📌 Vérifier les jobs échoués
bashCopierModifierphp artisan queue:failed
📌 Relancer les jobs échoués
bashCopierModifierphp artisan queue:retry all
📌 Supprimer les jobs échoués
bashCopierModifierphp artisan queue:flush
🔮 Conclusion : Laravel Queues, un outil puissant
Laravel Queues et Jobs permettent d’automatiser les tâches longues en arrière-plan, ce qui améliore considérablement les performances d’une application. 🚀
👉 💨 Laravel Breeze pour les petits projets ? OUI
👉 🌀 Laravel Jetstream pour les projets avancés ? OUI
👉 🔄 Laravel Queues pour automatiser les tâches ? ABSOLUMENT ✅