Skip to content

Tâches planifiées

Doggy intègre un système de tâches planifiées basé sur un TaskScheduler personnalisé + Symfony Messenger, avec prise en charge de l'exécution distribuée et de plusieurs types de tâches.

Aperçu

Le système de tâches planifiées se trouve dans src/Service/Task/ :

src/Service/Task/
├── TaskHandlerInterface.php   # 任务处理器接口
├── TaskHandlerLocator.php     # 处理器定位器
└── TaskScheduler.php          # 调度器

Les entités associées se trouvent dans src/Entity/System/ :

EntitéDescription
Task.phpDéfinition de tâche (Cron, gestionnaire, paramètres)
TaskLog.phpJournal d'exécution de tâche

Créer une tâche planifiée

1. Implémenter le gestionnaire de tâche

php
namespace App\Task;

use App\Service\Task\TaskHandlerInterface;

class ActivateAccountByHireDateTask implements TaskHandlerInterface
{
    public function handle(array $params = []): void
    {
        // 执行业务逻辑
    }
}

Exemple de tâche existante : src/Task/ActivateAccountByHireDateTask.php

2. Enregistrer la tâche

Enregistrement via la base de données ou une commande :

bash
php bin/console app:run-scheduler

Planification et exécution

Mécanisme d'implémentation de TaskScheduler :

  • Lit la configuration des tâches en base de données
  • Analyse les expressions Cron
  • Localise le gestionnaire via TaskHandlerLocator
  • Exécution asynchrone via Symfony Messenger (RunTaskMessage + RunTaskMessageHandler)
  • Enregistre le résultat d'exécution dans TaskLog

Architecture des messages

TaskScheduler → 发送 RunTaskMessage

Messenger (Doctrine Transport)

RunTaskMessageHandler → TaskHandlerInterface::handle()

TaskLog 记录执行结果

Interface d'administration

Point d'entrée : App\Controller\Admin\TaskController

Modèle : templates/admin/task/index.html.twig

  • Consultation de la liste des tâches
  • Consultation des journaux d'exécution
  • Déclenchement manuel de l'exécution

Fonctionnalités

  • Planification par expression Cron
  • Exécution asynchrone (file de messages Messenger)
  • Suivi de l'état d'exécution (TaskLog)
  • Mécanisme de nouvelle tentative en cas d'échec
  • Interface de gestionnaire extensible

Open source sous licence MIT | Copyright © 2026 Doggy