Skip to content

排程任務

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)
  • 失敗重試機制
  • 可擴充的處理器介面

基於 MIT 協議開源 | Copyright © 2026 Doggy