نظام طوابير Laravel واستخدام Supervisor في الإنتاج

يوليو 1, 2025

🚀 نظام Queue & Jobs في Laravel

هناخدك خطوة خطوة من أول إنشاء الجداول لحد ما تشغّل الطوابير في Production عن طريق Supervisor.

الخطوة 1: إنشاء جداول الطوابير

اكتب الأوامر دي:

php artisan queue:table
php artisan queue:failed-table
php artisan queue:batches-table
php artisan migrate

الخطوة 2: تراقب Jobs اللي فشلت

اكتب:

php artisan queue:failed

هيطلعلك جدول فيه ID، الاتصال، الرسالة، والتاريخ.

الخطوة 3: إعادة تشغيل Jobs الفاشلة

php artisan queue:retry 5      # لإعادة تشغيل Job برقم معين
php artisan queue:retry all    # كل الـfailed jobs

الخطوة 4: مسح الـ failed jobs

php artisan queue:flush

الخطوة 5: حذف الـ failed jobs القديمة

php artisan queue:prune-failed         # أقدم من 24 ساعة
php artisan queue:prune --hours=48         # أقدم من 48 ساعة

الخطوة 6: إعداد retries مع backoff

مثال:

php artisan queue:work --tries=2
php artisan queue:work --queue=notification --tries=2 --backoff=1200
php artisan queue:work --queue=notification --tries=2 --backoff=10,20

الخطوة 7: Job batches

لو عندك شغل كتير زي إرسال 10,000 إيميل، الفكرة هنا إنك تجمعهم في batch وتتابعهم مع إمكانية إعادة محاولات، وعمل إشعار في الآخر.

الخطوة 8: تشغيل الطوابير في Production باستخدام Supervisor

Supervisor هي اللي بتشغل وتراقب الـ queue workers لو حصل crash. مثال config:

[program:laravel-worker]
process_name=%(program_name)s_%(process_num)02d
command=php /var/www/html/artisan queue:work --tries=3 --backoff=30 --timeout=120 --max-jobs=1000 --max-time=3600 --sleep=3 --reset=1
autostart=true
autorestart=true
user=www-data
numprocs=2
redirect_stderr=true
stdout_logfile=/var/log/supervisor/laravel-worker.log

احفظه في /etc/supervisor/conf.d/laravel-worker.conf وبعدين:

sudo supervisorctl reread
sudo supervisorctl update
sudo supervisorctl start laravel-worker:*

المدونة

دليل للأنيميشن المتحركة بالسكّول بس بـ CSS

يونيو 26, 2025

دليل للأنيميشن المتحركة بالسكّول بـ CSS دلوقتي تقدر تربط الأنيميشن بتاعتك بـ السكّول من غير جافاسكريبت — كله CSS بحت. 1. التلات مكونات بتوع...

استدعاء ملفات JavaScript عند الحاجة فقط لتحسين أداء موقعك

يوليو 24, 2025

🧠 يعني إيه Dynamic Import؟ الديناميـك إمبورت ببساطة هو إنك تحمّل ملف أو موديول JavaScript "وقت الحاجة بس" مش من أول الصفحة. الميزة دي بتقلل حجم ال...

دورة حياة الطلب في Laravel (Request Lifecycle)

مايو 23, 2026

رحلة الـ Request داخل Laravel: الفكرة الأساسية ودورة الحياة الكاملة فهم عميق لكيفية معالجة إطار العمل لارافل للطلبات من البداية وحتى النهاية لإ...

React Native 0.81: نقلة نوعية في كفاءة بيئة التطوير

يناير 27, 2026

مقدمة يُعد React Native من أكثر الأطر استخدامًا في تطوير تطبيقات الهواتف الذكية متعددة المنصات. ومع ذلك، ظل وقت بناء تطبيقات iOS أحد أكبر التحديا...

الفرق بين Redux, Context & React Components في إدارة الحالة

أغسطس 06, 2025

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

أحدث مميزات ECMAScript 2025

يونيو 30, 2025

أحدث مميزات ECMAScript 2025 في 25 يونيو 2025، تم اعتماد ES2025 رسميًا. الإضافات الجاية هتسهل عليك كتابة الكود: 1. 📦 Import Attributes و JSON Module...