Nouvelles tentatives, délais et chaînage de tâches
Configurer les tentatives et les délais, puis chaîner des tâches dépendantes.
Nouvelles tentatives, délais et chaînage de tâches est une leçon PHP Academy gratuite sur CoddyKit. Ceci est la leçon 3 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage PHP Academy, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours PHP Academy comprend 4 leçons au total.
Nombre maximal de tentatives
Définissez le nombre de fois où une tâche doit être réessayée avant d’être déplacée vers failed_jobs.
<?php
class SendWelcomeEmail implements ShouldQueue
{
public int $tries = 3; // retry up to 3 times
}Nombre maximal d’exceptions
Utilisez $maxExceptions pour limiter les nouvelles tentatives selon le nombre d’exceptions, contrairement au nombre de tentatives, qui compte tous les essais, y compris ceux interrompus par un délai d’expiration.
<?php
public int $maxExceptions = 3;Délai avant nouvelle tentative
Définissez un délai, en secondes, entre les tentatives.
<?php
public int $backoff = 60; // wait 60 seconds before retry
// Or exponential backoff:
public function backoff(): array
{
return [1, 5, 10]; // 1s, 5s, 10s between attempts
}Délai d’expiration d’une tâche
Définissez une durée maximale d’exécution en secondes. Si le processus d’exécution la dépasse, la tâche est remise dans la file d’attente.
<?php
public int $timeout = 120; // 2 minutes maxEnvoyer avec un délai
Différez une tâche depuis l’endroit où l’appel d’envoi est effectué.
<?php
SendReminder::dispatch($user)->delay(now()->addDay());
// Or pass a Carbon instance:
SendReminder::dispatch($user)->delay(Carbon::tomorrow());fail() et released()
Dans handle(), appelez $this->fail($exception) pour marquer immédiatement la tâche comme échouée, ou $this->release($delay) pour la remettre en file d’attente avec un délai.
<?php
public function handle(): void
{
try {
// ...
} catch (TransientException $e) {
$this->release(30); // re-queue in 30 seconds
} catch (FatalException $e) {
$this->fail($e); // mark as failed now
}
}Méthode failed()
Définissez une méthode failed() sur la tâche pour effectuer le nettoyage lorsque toutes les tentatives sont épuisées.
<?php
public function failed(\Throwable $exception): void
{
// Notify team, update DB, etc.
Log::error("Job failed: ".$exception->getMessage());
}Chaînage de tâches
Chaînez les tâches afin que chacune ne s’exécute qu’après la réussite de la précédente.
<?php
Bus::chain([
new DownloadFile($url),
new ProcessFile($path),
new NotifyUser($user),
])->dispatch();Gérer les échecs d’une chaîne
Utilisez catch() pour gérer les échecs de la chaîne sans interrompre toute la chaîne.
<?php
Bus::chain([...])
->catch(fn (\Throwable $e) => Log::error($e))
->dispatch();Bus::batch()
Envoyez un lot de tâches en parallèle et exécutez un rappel lorsque toutes sont terminées ou que l’une d’elles échoue.
<?php
Bus::batch([
new ImportRow($rows[0]),
new ImportRow($rows[1]),
])->then(fn ($b) => Log::info("All done"))
->catch(fn ($b, $e) => Log::error($e))
->dispatch();Options du processus d’exécution
Démarrez les processus avec des paramètres précis de nouvelle tentative et de délai d’expiration : php artisan queue:work --tries=3 --timeout=90. Les paramètres au niveau de la tâche remplacent ceux du processus d’exécution.
Résumé
Définissez $tries, $backoff et $timeout sur la tâche. Utilisez release() pour les échecs temporaires et fail() pour les échecs définitifs. Chaînez les tâches séquentielles avec Bus::chain().
Vérification rapide
Quelle méthode remet une tâche en file d’attente avec un délai depuis handle() ?
Questions Fréquemment Posées
La leçon « Nouvelles tentatives, délais et chaînage de tâches » est-elle gratuite ?
Oui — le texte complet de « Nouvelles tentatives, délais et chaînage de tâches » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours PHP Academy, passe à CoddyKit PRO. Le cours PHP Academy comprend 4 leçons au total.
Qu'est-ce que j'apprendrai dans « Nouvelles tentatives, délais et chaînage de tâches » ?
Configurer les tentatives et les délais, puis chaîner des tâches dépendantes. Tu pratiques PHP Academy avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.
Dois-je avoir de l'expérience pour commencer PHP Academy ?
Aucune expérience préalable n'est requise. PHP Academy sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 3 sur 4.
Combien de temps prend la leçon « Nouvelles tentatives, délais et chaînage de tâches » ?
La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.
Peux-tu écrire et exécuter du code dans cette leçon PHP Academy ?
Oui. Chaque leçon PHP Academy inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.
Toutes les leçons de ce cours
- Notions de file d’attente et pilotes
- Créer et distribuer des tâches
- Nouvelles tentatives, délais et chaînage de tâches
- Surveiller les files d’attente avec Laravel Horizon