スケジュールタスク
Doggy はカスタム TaskScheduler + Symfony Messenger に基づいたスケジュールタスクシステムを内蔵し、分散実行と複数タイプのタスクをサポートします。
概要
スケジュールタスクシステムは src/Service/Task/ にあります:
src/Service/Task/
├── TaskHandlerInterface.php # 任务处理器接口
├── TaskHandlerLocator.php # 处理器定位器
└── TaskScheduler.php # 调度器関連エンティティは src/Entity/System/:
| エンティティ | 説明 |
|---|---|
Task.php | タスク定義(Cron、ハンドラー、パラメータ) |
TaskLog.php | タスク実行ログ |
スケジュールタスクの作成
1. タスクハンドラーの実装
php
namespace App\Task;
use App\Service\Task\TaskHandlerInterface;
class ActivateAccountByHireDateTask implements TaskHandlerInterface
{
public function handle(array $params = []): void
{
// 执行业务逻辑
}
}既存タスクの例: src/Task/ActivateAccountByHireDateTask.php
2. タスクの登録
データベースまたはコマンドで登録します:
bash
php bin/console app:run-schedulerスケジュール実行
TaskScheduler の実装メカニズム:
- データベースから Task 設定を読み込み
- Cron 式を解析
TaskHandlerLocatorでハンドラーを特定- Symfony Messenger で非同期実行(
RunTaskMessage+RunTaskMessageHandler) - 実行結果を
TaskLogに記録
メッセージアーキテクチャ
TaskScheduler → 发送 RunTaskMessage
↓
Messenger (Doctrine Transport)
↓
RunTaskMessageHandler → TaskHandlerInterface::handle()
↓
TaskLog 记录执行结果管理画面
入口: App\Controller\Admin\TaskController
テンプレート: templates/admin/task/index.html.twig
- タスク一覧の閲覧
- 実行ログの閲覧
- 手動トリガー実行
機能
- Cron 式によるスケジュール
- 非同期実行(Messenger メッセージキュー)
- 実行状態の追跡(TaskLog)
- 失敗時のリトライメカニズム
- 拡張可能なハンドラーインターフェース