المهام المجدولة
يضم 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)
- آلية إعادة المحاولة عند الفشل
- واجهة معالج قابلة للتوسعة