انتقل إلى محتوى الدرس
الدرس 53
دورة إطار العمل Laravel

تشغيل المهام الخلفية وإدارة طوابير الانتظار Queues في LaravelDispatching Background Jobs and Managing Queues in Laravel

نقل العمليات الثقيلة إلى الخلفية عبر كلاسات المهام Jobs وطوابير الانتظار Queues وتشغيل العامل queue:work ومعالجة المهام الفاشلة.
أقسام الدرس
6
الأمثلة
6
اللغة
العربية
تاريخ النشر
غير محدد
المشاهدات
0
محتوى الدرس
في هذا الدرس 6تصفّح المواضيع

إن تنفيذ العمليات البطيئة مثل توليد ملفات PDF أو معالجة الفيديو أو الاتصال بواجهات خارجية أثناء طلب HTTP يجبر المستخدم على الانتظار الطويل. يضبط Laravel 12 الاتصال الافتراضي لطوابير الانتظار على QUEUE_CONNECTION=database، ليحفظ المهام الخلفية داخل جدول jobs ويعيد استجابة HTTP للمتصفح فوراً.

  • سواقة قاعدة البيانات الافتراضية (Default Database Driver): يتضمن Laravel 12 جدولي jobs و failed_jobs ضمن ملفات التهجير الافتراضية.
  • استجابة HTTP فورية (Instant HTTP Response): نقل المهام الثقيلة إلى الطابور يحافظ على سرعة استجابة الويب في أجزاء من الثانية.
  • تعدد سواقات التشغيل (Pluggable Drivers): يمكنك تحويل QUEUE_CONNECTION إلى redis أو sqs في الإنتاج دون تعديل كود المهمة.
مخطط معماري يوضح تشغيل المهام الخلفية وإدارة طوابير الانتظار Queues في Laravel في إطار العمل Laravel 12
PHP
// .env queue configuration:
// QUEUE_CONNECTION=database

// Check active queue driver:
$driver = config('queue.default');

نفذ الأمر php artisan make:job ProcessPodcast لتوليد كلاس مهمة داخل مجلد app/Jobs يطبق الواجهة ShouldQueue. عند تمرير نموذج Eloquent إلى باني المهمة، تقوم سمة SerializesModels بتخزين المفتاح الأساسي للنموذج فقط داخل الطابور وتعيد جلب السجل المحدث من القاعدة عند بدء تنفيذ دالة handle.

  • واجهة ShouldQueue (ShouldQueue Marker): تطبيق واجهة ShouldQueue يخبر Laravel بدفع المهمة إلى الطابور غير المتزامن بدلاً من تنفيذها لحظياً.
  • التسلسل الخفيف للنماذج (Lightweight Serialization): تحفظ سمة SerializesModels معرّف السجل فقط لمنع تضخم حجم البيانات وضمان جلب أحدث نسخة عند التنفيذ.
  • حقن الاعتماديات في handle (Method Dependency Injection): يمكنك التلميح النوعي للكلاسات الخدمية مباشرة في معاملات دالة handle ليحقنها الحاوي تلقائياً.
PHP
namespace App\Jobs;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Queue\Queueable;

class ProcessPodcast implements ShouldQueue {
    use Queueable;
    public function handle(): void {}
}

لدفع مهمة إلى طابور الانتظار من داخل المتحكم، استدع الدالة الثابتة ProcessPodcast::dispatch مع تمرير معاملات الباني المطلوبة. يمكنك ربط دالة onQueue لتوجيه المهام العاجلة إلى طابور ذي أولوية، أو دالة delay لتأجيل وقت التنفيذ لفترة زمنية محددة.

  • دالة الإطلاق الثابتة (Static Dispatch Helper): استدع ProcessPodcast::dispatch في أي مكان بالتطبيق لإدراج المهمة في الطابور.
  • تأجيل التنفيذ (Delayed Execution): اربط دالة delay مع وقت مستقبلي لكي لا يسحب العامل المهمة إلا بعد انقضاء المهلة.
  • تخصيص أسماء الطوابير (Dedicated Queue Names): اربط دالة onQueue لفصل مهام الوسائط الثقيلة عن طابور رسائل البريد السريعة.
PHP
use App\Jobs\ProcessPodcast;

ProcessPodcast::dispatch($podcast)
    ->onQueue('processing')
    ->delay(now()->addMinutes(5));

تبقى المهام المجدولة محفوظة في قاعدة البيانات حتى يقوم عامل الطابور بسحبها وتنفيذها عبر الأمر php artisan queue:work. ونظراً لأن عمال الطابور يحملون إطار Laravel مرة واحدة في الذاكرة، يجب تشغيل الأمر php artisan queue:restart بعد نشر أي تعديل برمجي ليقرأ العمال الكود الجديد.

  • تشغيل عامل الطابور (Starting a Worker): نفذ الأمر php artisan queue:work لسحب ومعالجة المهام باستمرار في الخلفية.
  • ترتيب أولوية الطوابير (Queue Priority Order): مرر الخيار --queue=high,default لمعالجة جميع مهام الأولوية القصوى قبل الطابور الافتراضي.
  • إعادة التشغيل الآمنة (Graceful Code Reloads): نفذ الأمر php artisan queue:restart عند تحديث الكود لينهي العامل مهمته الحالية ويعيد التشغيل.
PHP
// Start processing high priority then default queue:
// php artisan queue:work --queue=high,default

// Signal workers to restart after current job:
// php artisan queue:restart

قد تفشل الاتصالات الخارجية داخل المهمة مؤقتاً، لذا يتيح Laravel ضبط عدد المحاولات التلقائية وفترات الانتظار عبر خاصيتي $tries و $backoff داخل كلاس المهمة. وإذا استنفدت المهمة جميع المحاولات المتاحة، ينقل Laravel بياناتها إلى جدول failed_jobs ويستدعي دالة failed الخاصة بها.

  • حدود المحاولة والانتظار (Retry Limits & Backoff): عرّف الخاصيتين $tries = 3 و $backoff = 30 داخل كلاس المهمة لتحديد المحاولات والمهلة الفاصلة.
  • خطاف الفشل النهائي (Failure Hook): نفذ دالة failed داخل كلاس المهمة لتنبيه الإدارة أو تنظيف الملفات المؤقتة عند فشل المهمة نهائياً.
  • الفحص وإعادة التشغيل (Inspecting & Retrying): استخدم الأمر queue:failed لعرض المهام المتعثرة والأمر queue:retry all لإعادتها للطابور.
PHP
class ProcessPodcast implements ShouldQueue {
    use Queueable;
    public int $tries = 3;
    public int $backoff = 60;
    public function failed(\Throwable $e): void {
        // Handle permanent job failure
    }
}

يمكن أيضاً وضع أي كلاس بريد Mailable أو إشعار Notification في طابور الخلفية بمجرد تطبيق الواجهة ShouldQueue عليه تماماً مثل كلاسات المهام المخصصة. راجع أهم خصائص التحكم بالمهام وأوامر تشغيل العمال في Artisan أدناه لبناء أنابيب معالجة خلفية موثوقة.

وجه المقارنة الهندسيالأسلوب المتزامن أو التقليديمعيار Laravel 12 الحديث
تنفيذ العمليات الثقيلةمعالجة الفيديو أو البريد بشكل متزامن أثناء انتظار طلب HTTPكلاسات مهام غير متزامنة تطبق واجهة ShouldQueue
تخزين بيانات النموذجتسلسل كائن النموذج الكامل مع علاقاته داخل سجل الطابورحفظ المفتاح الأساسي فقط عبر SerializesModels وإعادة جلبه طازجاً
أخطاء الشبكة المؤقتةضياع المهمة نهائياً عند حدوث أي فشل عابر في الاتصالإعادة المحاولة التلقائية عبر $tries و $backoff وجدول failed_jobs
تناسق معاملات القاعدةاحتمال سحب العامل للمهمة قبل اعتماد معاملة قاعدة البياناتاستخدام afterCommit لضمان إطلاق المهمة بعد نجاح المعاملة
PHP
// Retry all failed jobs in the database:
// php artisan queue:retry all

// Clear all failed jobs:
// php artisan queue:flush
خلاصة المعرفة ومحطة الانتقال

ملخص الدرس

حصاد الدرس

مراجعة مركّزة لأهم المفاهيم والقواعد الهندسية التي أتقنتها في هذا الدرس قبل التطبيق العملي

ماذا تعلّمت في هذا الدرس؟

أتقنت في هذا الدرس حول «تشغيل المهام الخلفية وإدارة طوابير الانتظار Queues في Laravel» مفاهيم إعداد اتصال طوابير قاعدة البيانات، وإنشاء كلاسات المهام الخلفية Jobs، وإطلاق المهام وتأجيل وقت تنفيذها وفق معايير Laravel 12 الحديثة.

الخطوة التالية والدرس القادم

انتقل الآن إلى الدرس التالي «التخزين المؤقت والأحداث والمستمعون وجدولة المهام في Laravel» للبناء التراكمي على ما تعلمته.

مشاركة

هل كان هذا الدرس مفيدًا؟

جارٍ تحميل الآراء…

ابنِ لغتك البرمجية

المصطلحات4

راجع المعنى، اشرحه لنفسك، ثم علّم البطاقة كمفهومة.

0 / 4 مفهومةأول بطاقة، أول خطوة
01 Queue Workers طوابير المهام
نقل العمليات الثقيلة إلى الخلفية عبر كلاسات المهام Jobs وطوابير الانتظار Queues وتشغيل العامل queue:work ومعالجة المهام الفاشلة.
للمراجعة
02 Configuring Database Queue Connections إعداد اتصال طوابير قاعدة البيانات
المفهوم الهندسي والتطبيق العملي المباشر لقسم إعداد اتصال طوابير قاعدة البيانات في إطار العمل Laravel 12.
للمراجعة
03 Creating Queued Job Classes إنشاء كلاسات المهام الخلفية Jobs
المفهوم الهندسي والتطبيق العملي المباشر لقسم إنشاء كلاسات المهام الخلفية Jobs في إطار العمل Laravel 12.
للمراجعة
04 Dispatching and Delaying Jobs إطلاق المهام وتأجيل وقت تنفيذها
المفهوم الهندسي والتطبيق العملي المباشر لقسم إطلاق المهام وتأجيل وقت تنفيذها في إطار العمل Laravel 12.
للمراجعة

اقرأ البطاقات بحرية. سجّل الدخول لحفظ تقدم مراجعتك.

حروف قليلة. معنى كامل.

الاختصارات4

راجع المعنى، اشرحه لنفسك، ثم علّم البطاقة كمفهومة.

0 / 4 مفهومةأول بطاقة، أول خطوة
01 MVC MVC
Model View Controller
النمط المعماري الذي يفصل بين نماذج البيانات Models، وطبقات العرض Views، والمتحكمات Controllers في Laravel.
للمراجعة
02 CLI CLI
Command Line Interface
واجهة سطر الأوامر التي تعمل عبر أداة php artisan لتوليد الملفات وإدارة التطبيق.
للمراجعة
03 HTTP HTTP
Hypertext Transfer Protocol
بروتوكول نقل النص الفائق الذي ينظم طلبات المتصفح واستجابات خادم Laravel.
للمراجعة
04 PSR PSR
PHP Standards Recommendations
المعايير القياسية للغة PHP مثل التحميل التلقائي PSR-4 التي يلتزم بها إطار العمل Laravel.
للمراجعة

اقرأ البطاقات بحرية. سجّل الدخول لحفظ تقدم مراجعتك.

من الفهم للتطبيق

مهامك قبل الاختبار

خطوة صغيرة كل مرة. وإنجاز تقدر ترجع له.

0/2مهام منجزة
  1. اكتب ونفّذ المثال البرمجي المشروح في قسم «إعداد اتصال طوابير قاعدة البيانات» داخل مشروع Laravel 12 المحلي وتحقق من النتيجة.

  2. بدّل بين الحالات الثلاث في المحاكي التفاعلي ضمن قسم «إنشاء كلاسات المهام الخلفية Jobs» وقارن مخرجات التنفيذ.

تأشير المهمة إقرار منك بإتمامها، وليس تصحيحًا آليًا للكود. يُحفظ تقدمك في حسابك.

مساحة التحدي

اختبر فهمك.
ووصلها للإتقان.

كل سؤال خطوة لقدّام. اختار، اكتب كود، وشوف نتيجتك فورًا.

8أسئلة 3أنواع تحديات 100%هدف الإتقان
تصحيح تلقائي. فرص بلا حدود.

أكمل المهام، واجمع كل الإجابات الصحيحة. أقل من 100%؟ راجع وأعد المحاولة.

الأسئلة متاحة للاطلاع. سجّل الدخول للتفاعل وحفظ تقدمك.

لمحة عن التحدي8 أسئلة تنتظرك
01

ما الهدف الهندسي الأساسي من إعداد اتصال طوابير قاعدة البيانات في إطار العمل Laravel 12؟

يسهم إعداد اتصال طوابير قاعدة البيانات في تنظيم منطق التطبيق بأسلوب معياري آمن وقابل للصيانة في Laravel 12.

02

يساعد الالتزام باصطلاحات Laravel 12 الرسمية في قسم «إنشاء كلاسات المهام الخلفية Jobs» على رفع جودة الكود وسهولة اختباره آلياً.

صواب؛ الالتزام بالمعايير القياسية في Laravel 12 يجعل الكود واضحاً وسهل الفحص والصيانة.

03

أي آلية في Laravel 12 تتولى إدارة إطلاق المهام وتأجيل وقت تنفيذها بشكل مباشر ومنظم؟

توفر طبقة إطار العمل وحاوية الخدمات في Laravel 12 الأدوات القياسية لإدارة إطلاق المهام وتأجيل وقت تنفيذها.

04

لماذا يُعد تطبيق تشغيل عامل الطابور ومعالجة المهام مهماً عند بناء تطبيقات Laravel 12 جاهزة للإنتاج؟

لأنه يمنع الأخطاء البرمجية الخفية ويوحد سلوك التطبيق بين بيئتي التطوير والإنتاج.

05

في Laravel 12، يُنصح بكتابة مفاتيح الإنتاج السرية مباشرة داخل ملفات الكود المصدري المرفوعة إلى Git بدلاً من ملفات البيئة.

خطأ؛ يجب حفظ المفاتيح والبيانات السرية في متغيرات البيئة وعدم رفعها أبداً إلى مستودع Git.

06

ما المزايا الهندسية التي يحققها تطبيق معالجة وإعادة تشغيل المهام الفاشلة في Laravel 12؟ (اختر كل ما ينطبق)

يوفر فصلاً واضحاً للمسؤوليات، وأماناً أعلى أثناء التنفيذ، وتعاوناً أسهل بين أفراد الفريق.

07

يوظف إطار العمل Laravel 12 ميزات PHP 8 الحديثة مثل تحديد أنواع القيم المرجعة لجعل الكود أكثر وضوحاً وأماناً.

صواب؛ يعتمد Laravel 12 بشكل كامل على الصياغة الحديثة للغة PHP 8.2+ وسلامة الأنواع.

08

ما الفرق الجوهري بين معيار Laravel 12 الحديث والملفات اليدوية التقليدية في مرجع أوامر وخصائص طوابير Laravel؟

يوفر Laravel 12 واجهات قياسية موحدة وحماية مدمجة تغني عن الكود اليدوي المعرض للأخطاء.