queue:work
تشغيل عامل طابور queue:work
queue:work يشغّل عاملًا (Worker) يبقى قيد التشغيل ويلتقط المهام المُرسَلة للطابور وينفّذها واحدة تلو الأخرى في الخلفية.
بلا هذا الأمر تبقى المهام المُرسَلة عبر dispatch() متكدّسة بالطابور بلا تنفيذ أبدًا. في بيئة الإنتاج يجب إبقاء العامل يعمل باستمرار عبر مدير عمليات مثل Supervisor، لأنه يتوقّف تلقائيًا عند أي تغيير بكود التطبيق ويحتاج إعادة تشغيل.
الصياغة
php artisan queue:work [connection] [options]
📄 مثال
# تشغيل عامل على الاتصال الافتراضي php artisan queue:work # طوابير بأولوية: emails أولًا ثم default php artisan queue:work --queue=emails,default # حد أقصى 3 محاولات لكل مهمة php artisan queue:work --tries=3 # إنهاء المهمة إن تجاوزت 30 ثانية php artisan queue:work --timeout=30 # ينفّذ كل ما بالطابور ثم يتوقّف (مفيد بحاويات Docker) php artisan queue:work --stop-when-empty
أهم الخيارات
| الخيار | الوظيفة |
|---|---|
| --queue=a,b | يحدّد قائمة طوابير بترتيب أولوية المعالجة |
| --tries=n | أقصى عدد محاولات قبل اعتبار المهمة فاشلة (0 = محاولات بلا نهاية) |
| --timeout=n | أقصى ثوانٍ لتنفيذ مهمة واحدة قبل إيقافها قسرًا |
| --stop-when-empty | ينهي العملية بعد تفريغ الطابور بدل الانتظار لمهام جديدة |
| --once | ينفّذ مهمة واحدة فقط ثم يتوقّف |
💡 نصائح عملية
- queue:listen كان أمرًا قديمًا مشابهًا لكنه مهجور لصالح queue:work الأكفأ — استخدم queue:work دائمًا بالمشاريع الحديثة
⚠️ أخطاء شائعة
- نسيان تشغيل queue:work أثناء التطوير فتبدو المهام وكأنها لا تُنفَّذ أبدًا رغم أنها فعليًا بالطابور تنتظر
خصائص ذات صلة
🎓 تريد فهم الصورة الكاملة خطوة بخطوة؟ ابدأ من مسار LARAVEL الكامل بالعربي.