صف (Queue) در Laravel چیست؟ — راهنمای مفاهیم و کاربرد عملی
کاربر فرم را submit میکند — ۸ ثانیه صبر میکند تا ایمیل خوشآمد، PDF فاکتور و sync CRM تمام شود. تجربه بد. Queue یعنی «فوراً بگو ثبت شد» و بقیه را worker در پسزمینه انجام دهد. در Laravel این الگو first-class است — از مستندات Queue تا Horizon برای مانیتورینگ.
مشکل بدون Queue
- timeout HTTP
- کاربر منتظر کار غیرضروری
- خطا در وسط = نیمهکار ماندن
- spike ترافیک = crash
با Queue چه میشود؟
- Request منطق اصلی را انجام میدهد (ذخیره سفارش)
- Job به صف push میشود (ارسال ایمیل)
- Response سریع برمیگردد
- Worker جدا job را اجرا میکند
Driverهای رایج
| Driver | کاربرد |
|---|---|
| sync | توسعه — فوری همزمان |
| database | شروع ساده، بدون Redis |
| redis | production پیشنهادی — Redis و Horizon |
| sqs | AWS serverless |
تنظیم .env
QUEUE_CONNECTION=database
# production:
# QUEUE_CONNECTION=redis
راهنمای env. migration جدول jobs:
php artisan queue:table
php artisan migrate
Worker
php artisan queue:work
روی سرور با Supervisor همیشه روشن — Cron و Schedule مرتبط ولی جدا.
چه کارهایی Queue شوند؟
- ایمیل و SMS
- resize تصویر / FFmpeg
- webhook به سرویس خارجی
- گزارش PDF سنگین
- index در موتور جستجو
نه: validation و ذخیره اصلی transaction — آنها synchronous بمانند.
Queue و Event
Listener میتواند ShouldQueue باشد — overlap مفهومی. Job صریح control بیشتری دارد — راهنمای Job.
جمعبندی
Queue = مقیاس و UX. بعدی: Job، Redis، failed jobs. کش هم مکمل است: بهینهسازی.