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