Featured blog image
66 كلمة 1 دقيقة للقراءة

التعامل مع فشل المهام في Laravel Queue خطوة بخطوة

جدول المحتويات

عند استخدام Laravel Queue لتنفيذ المهام في الخلفية، ممكن تواجه حالات فشل بسبب مشاكل في الاتصال، أو أخطاء في الكود نفسه. في المقال ده هنتكلم عن إزاي Laravel بيتعامل مع فشل الـ Jobs، وازاي تقدر تتحكم في عدد المحاولات، والتعامل مع الأخطاء خطوة بخطوة.

أولاً: يعني إيه فشل Job؟

الـ Job بتفشل لما يحصل استثناء (Exception) أثناء تنفيذها. Laravel بيسجّل الفشل ده، وبيقرر هل يحاول تاني ولا لأ، حسب الإعدادات اللي أنت محددها.

عدد المحاولات (Attempts)

تقدر تحدد عدد المرات اللي Laravel يحاول فيها تنفيذ الـ Job قبل ما يعتبرها فشلت نهائيًا.

public $tries = 3;

القيمة الافتراضية 1، لكن ممكن تزودها مثلاً لـ 3 عشان يجرب أكثر من مرة.

تحديد زمن أقصى للمحاولة (Timeout)

لو المهمة استغرقت وقت طويل، ممكن تحدد أقصى مدة يُسمح بيها للتنفيذ:

public $timeout = 30; // بالثواني

التعامل مع الفشل النهائي

لما الـ Job تفشل بعد آخر محاولة، Laravel بينفذ تلقائيًا دالة اسمها failed() داخل الـ Job. تقدر تستخدمها لتسجيل الخطأ أو ترسل إشعار أو تعمل أي إجراء مناسب.

public function failed(Exception $exception)
{
    Log::error('فشل تنفيذ المهمة: ' . $exception->getMessage());
}

تفعيل جدول failed_jobs

Laravel بيخزن كل المهام اللي فشلت نهائيًا في جدول اسمه failed_jobs. عشان تفعله، نفّذ الأوامر دي:

php artisan queue:failed-table
php artisan migrate

هتلاقي بعدها جدول جديد في قاعدة البيانات بيحفظ تفاصيل كل فشل، زي اسم الـ job، سبب الخطأ، وتاريخ الفشل.

إعادة المحاولة بعد الفشل

لو عايز تعيد تشغيل المهام اللي فشلت:

php artisan queue:retry all

أو ممكن تحدد ID معين من جدول failed_jobs:

php artisan queue:retry 5

حذف المهام الفاشلة

لو خلصت من تحليل الأخطاء ومش محتاج تحتفظ بيها:

php artisan queue:flush

الأمر ده بيحذف كل السجلات من جدول failed_jobs.

نصيحة عملية

خلي دايمًا في دالة failed() تسجّل الأخطاء في log أو ترسل تنبيه على البريد، خصوصًا في المشاريع الإنتاجية. ده هيساعدك تكتشف الأعطال بسرعة وتحافظ على ثبات النظام


شارك الآن ؟
تواصل معي