Laravel
Laravel 11 & 10 • Chapitre 4 : Fonctionnalités Avancées

Jobs & Queues : Le Traitement en Arrière-Plan

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.

⚡
Réponse HTTP Immédiate

Le contrôleur enregistre la tâche en BDD ou Redis et rend la main à l'utilisateur en moins de 20 ms.

🗄️
Drivers Flexibles

Démarrez facilement avec le driver database, puis passez à redis ou Amazon SQS en production sans toucher au code.

⏱️
Délais & Priorités

Planifiez l'exécution différée avec ->delay(now()->addMinutes(5)) ou sur une file prioritaire ->onQueue('high').

🛡️
Tolérance aux Pannes

Tentatives automatiques configurables ($tries = 3) et table failed_jobs pour analyser et rejouer les erreurs.

app/Jobs/GenerateMonthlyReport.php & queue:work
// 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

Simulateur Simulateur de Queue Worker en Temps Réel

Traitement Asynchrone FIFO

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 IDNom de la Classe JobDescriptionStatutDurée Simulée
#101GeneratePdfReportGénération PDF Bilan Annuel En attente 820 ms
#102SendNewsletterEnvoi Newsletter à 250 inscrits En attente 650 ms
#103ResizeProductImagesRedimensionnement 12 photos produit En attente 410 ms
Garder le Worker Actif : Supervisor

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.

Rejouer les Erreurs : failed_jobs

Si une API externe tombe en panne ou si la base coupe, les jobs ne sont jamais perdus !

php artisan queue:retry all

Permet de retenter d'un coup l'ensemble des transactions échouées une fois le service rétabli.