Ne faites plus attendre vos utilisateurs lors de tâches gourmandes en temps de calcul ! Grâce au système de Jobs et de Files d'Attente (Queues) de Laravel, déchargez le travail lourd (génération de PDFs, imports CSV, envois de mails en masse) vers des workers asynchrones dédiés.
Le contrôleur enregistre la tâche en BDD ou Redis et rend la main à l'utilisateur en moins de 20 ms.
Démarrez facilement avec le driver database, puis passez à redis ou Amazon SQS en production sans toucher au code.
Planifiez l'exécution différée avec ->delay(now()->addMinutes(5)) ou sur une file prioritaire ->onQueue('high').
Tentatives automatiques configurables ($tries = 3) et table failed_jobs pour analyser et rejouer les erreurs.
// Commande Artisan : php artisan make:job GenerateMonthlyReport
namespace AppJobs;
use AppModelsUser;
use AppServicesPdfReportService;
use IlluminateBusQueueable;
use IlluminateContractsQueueShouldQueue;
use IlluminateFoundationBusDispatchable;
use IlluminateQueueInteractsWithQueue;
use IlluminateQueueSerializesModels;
class GenerateMonthlyReport implements ShouldQueue
{
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
// Nombre maximum de tentatives en cas d'erreur réseau
public int $tries = 3;
// Délai en secondes avant de retenter un job échoué
public int $backoff = 60;
public function __construct(public User $user, public int $annee) {}
public function handle(PdfReportService $pdfService): void
{
// Tâche lourde (3 à 10 secondes de calcul et rendu PDF)
$pdfService->genererPour($this->user, $this->annee);
}
}
// Dans le contrôleur :
// Le job est sérialisé et inséré en file d'attente instantanément
GenerateMonthlyReport::dispatch($user, 2026);
// Dans le terminal du serveur (ou via Supervisor en production) :
// php artisan queue:work --tries=3 Ajoutez des tâches dans la file d'attente (simulée via la table SQL jobs) puis lancez le worker pour voir le traitement s'effectuer séquentiellement sans bloquer l'interface.
| Queue ID | Nom de la Classe Job | Description | Statut | Durée Simulée |
|---|---|---|---|---|
| #101 | GeneratePdfReport | Génération PDF Bilan Annuel | En attente | 820 ms |
| #102 | SendNewsletter | Envoi Newsletter à 250 inscrits | En attente | 650 ms |
| #103 | ResizeProductImages | Redimensionnement 12 photos produit | En attente | 410 ms |
Sur un serveur de production, vous ne pouvez pas laisser une commande php artisan queue:work ouverte dans votre terminal SSH.
On utilise un gestionnaire de processus comme Supervisor (ou systemd) sous Linux pour redémarrer automatiquement le worker en arrière-plan en cas de crash serveur.
Si une API externe tombe en panne ou si la base coupe, les jobs ne sont jamais perdus !
Permet de retenter d'un coup l'ensemble des transactions échouées une fois le service rétabli.