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

Notions voisines

DébogageMessenger