لماذا الطوابير؟
بعض المهام بطيئة: إرسال بريد، معالجة صورة، استدعاء API خارجي. لو نفّذتها داخل الطلب العادي ينتظر المستخدم ثوانٍ لا داعي لها. الطابور (Queue) يؤجّل تنفيذها لعملية خلفية منفصلة، فيرجع الردّ للمستخدم فورًا.
إنشاء مهمة (Job)
php artisan make:job SendWelcomeEmail
<?php
namespace App\Jobs;
use App\Models\User;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Queue\Queueable;
class SendWelcomeEmail implements ShouldQueue
{
use Queueable;
public function __construct(public User $user) {}
public function handle(): void
{
Mail::to($this->user->email)->send(new WelcomeMail($this->user));
}
}
تنفيذ ShouldQueue هو ما يجعل Laravel يرسل المهمة لطابور بدل تنفيذها فورًا.
إرسال المهمة (Dispatch)
<?php
SendWelcomeEmail::dispatch($user);
// تنفيذ فوري متزامن (مفيد للاختبار المحلي)
SendWelcomeEmail::dispatchSync($user);
// إرسال بشرط
SendWelcomeEmail::dispatchIf($user->wantsEmail, $user);
موصل الطابور (Connection)
يُضبَط في .env وconfig/queue.php:
QUEUE_CONNECTION=database
| الموصل | الاستخدام |
|---|---|
sync | تنفيذ فوري بلا طابور حقيقي — افتراضي التطوير |
database | يخزّن المهام بجدول قاعدة بيانات |
redis | أسرع وأشيع بالإنتاج |
موصل database يحتاج جدولًا أولًا:
php artisan queue:table
php artisan migrate
تشغيل العامل (Worker)
php artisan queue:work
يبقى قيد التشغيل ويلتقط المهام تباعًا. بترتيب أولوية بين عدّة طوابير:
php artisan queue:work --queue=emails,default
💡 بالإنتاج شغّل
queue:workعبر مدير عمليات مثل Supervisor ليعيد تشغيله تلقائيًا عند توقّفه أو عند نشر كود جديد.
تأخير وتوجيه المهمة
<?php
SendWelcomeEmail::dispatch($user)
->delay(now()->addMinutes(10))
->onQueue('emails')
->onConnection('redis');
فشل المهام وإعادة المحاولة
<?php
class SendWelcomeEmail implements ShouldQueue
{
public $tries = 3; // أقصى عدد محاولات
public $timeout = 30; // ثوانٍ قبل إيقافها قسرًا
}
المهام التي تفشل بكل محاولاتها تُحفظ بجدول failed_jobs:
php artisan queue:retry all
أخطاء شائعة
- نسيان تشغيل
queue:workفتبقى المهام متكدّسة بالطابور بلا تنفيذ أبدًا. - استخدام موصل
syncبالإنتاج — ينفّذ المهام فورًا وكأنها بلا طابور أصلًا.
🎯 التالي: جدولة المهام.