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.php | Définition de tâche (Cron, gestionnaire, paramètres) |
TaskLog.php | Journal 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-schedulerPlanification 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