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