Symfony Scheduler : planifier des tâches récurrentes
Symfony Scheduler envoie un message à intervalle régulier, sans crontab : le calendrier vit dans le code, le traitement dans un handler ordinaire.
#[AsSchedule('soir')] final class CorbeauDuSoir implements ScheduleProviderInterface { public function getSchedule(): Schedule { return (new Schedule()) ->add(RecurringMessage::every('1 day', new ResumeDuSoir(), from: '18:00')); } } // Un worker consomme le transport créé par l'attribut : messenger:consume scheduler_soir
Un calendrier (Schedule) dit quel message envoyer et quand, avec des RecurringMessage : tous les jours à 18 h, toutes les heures. Le message part ensuite dans le bus de Messenger, et c'est un handler ordinaire qui le traite : planifier et traiter restent séparés. #[AsSchedule('soir')] crée un transport scheduler_soir, qu'un worker consomme comme une file. Le piège : sans l'attribut, ou sans worker qui consomme ce transport, rien ne part, et rien ne le signale.
Les exercices font envoyer à l'aubergiste, chaque soir, le résumé des réservations du lendemain, puis retrouver pourquoi ce résumé ne part plus et pourquoi il annonce la mauvaise journée.
2 exercices font travailler cette notion, en écrivant du code dans le navigateur.
Dans les parcours
- Le corbeau du soir Symfony pour les devs PHP · chapitre 7 : Le corbeau messager
- 🐉 Boss : la volière en panne Symfony pour les devs PHP · chapitre 7 : Le corbeau messager