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:

  • قراءة تكوينات المهام من قاعدة البيانات
  • تحليل تعبيرات 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 | حقوق النشر © 2026 Doggy