تكرار السؤال: …
الإجابة المختصرة
queue:work يبقي إطار العمل محملاً في الذاكرة لأقصى أداء ويتطلب إعادة تشغيل عند تعديل الكود، بينما queue:listen يعيد تشغيل التطبيق مع كل مهمة وهو مخصص للتطوير.
الشرح
في بيئة الإنتاج، يتم دائماً استخدام php artisan queue:work تحت إشراف Supervisor، لأنه يقلل استهلاك المعالج بتشغيل إطار العمل لمرة واحدة في الذاكرة وخدمة آلاف المهام المتتالية. على العكس، فإن queue:listen ينشئ عملية جديدة لكل مهمة، مما يجعله بطيئاً جداً في الإنتاج ومناسباً فقط لبيئة التطوير لمشاهدة التعديلات دون إعادة تشغيل الـ worker.
مثال بالكود
# Production (under Supervisor): the framework stays in memory — fast, but needs a restart after deploys
php artisan queue:work redis --tries=3 --timeout=90 --max-time=3600
php artisan queue:restart # call this from the deploy script so workers reload the new code
# Development only: boots the framework for every job — slow, but always runs the latest code
php artisan queue:listenأخطاء شائعة
- استخدام queue:listen في خوادم الإنتاج مما يضاعف استهلاك الـ CPU والذاكرة.
أسئلة متابعة
- كيف تصمم طوابير متعددة ذات أولويات مختلفة (High, Default, Low) في Laravel؟
- كيف تعد أداة إدارة العمليات Supervisor على خوادم Linux لضمان استمرار عمل عمال Laravel؟