Geplante Aufgaben
Doggy verfügt über ein integriertes System für geplante Aufgaben auf Basis eines benutzerdefinierten TaskScheduler + Symfony Messenger mit Unterstützung für verteilte Ausführung und verschiedene Aufgabentypen.
Übersicht
Das System für geplante Aufgaben befindet sich unter src/Service/Task/:
src/Service/Task/
├── TaskHandlerInterface.php # 任务处理器接口
├── TaskHandlerLocator.php # 处理器定位器
└── TaskScheduler.php # 调度器Die zugehörigen Entitäten befinden sich unter src/Entity/System/:
| Entität | Beschreibung |
|---|---|
Task.php | Aufgabendefinition (Cron, Handler, Parameter) |
TaskLog.php | Ausführungsprotokoll der Aufgaben |
Geplante Aufgabe erstellen
1. Aufgaben-Handler implementieren
php
namespace App\Task;
use App\Service\Task\TaskHandlerInterface;
class ActivateAccountByHireDateTask implements TaskHandlerInterface
{
public function handle(array $params = []): void
{
// 执行业务逻辑
}
}Beispiel für eine vorhandene Aufgabe: src/Task/ActivateAccountByHireDateTask.php
2. Aufgabe registrieren
Registrierung über die Datenbank oder den Befehl:
bash
php bin/console app:run-schedulerPlanung und Ausführung
Mechanismus von TaskScheduler:
- Liest die Task-Konfiguration aus der Datenbank
- Parst Cron-Ausdrücke
- Lokalisiert den Handler über
TaskHandlerLocator - Führt über Symfony Messenger asynchron aus (
RunTaskMessage+RunTaskMessageHandler) - Das Ausführungsergebnis wird in
TaskLogaufgezeichnet
Nachrichtenarchitektur
TaskScheduler → 发送 RunTaskMessage
↓
Messenger (Doctrine Transport)
↓
RunTaskMessageHandler → TaskHandlerInterface::handle()
↓
TaskLog 记录执行结果Verwaltungsoberfläche
Einstieg: App\Controller\Admin\TaskController
Template: templates/admin/task/index.html.twig
- Aufgabenliste ansehen
- Ausführungsprotokolle ansehen
- Manuelles Auslösen der Ausführung
Funktionen
- Planung über Cron-Ausdrücke
- Asynchrone Ausführung (Messenger-Nachrichtenwarteschlange)
- Verfolgung des Ausführungsstatus (TaskLog)
- Wiederholungsmechanismus bei Fehlern
- Erweiterbare Handler-Schnittstelle