فصل چهارم: API، صف و استقرار

صف و Job

پردازش وظایف سنگین با صف

برخی عملیات مانند ارسال ایمیل، پردازش تصویر یا تولید گزارش ممکن است زمان زیادی طول بکشند. اگر این کارها را مستقیماً در طول یک درخواست HTTP اجرا کنید، کاربر باید منتظر بماند و تجربه‌ی کاربری بدی خواهد داشت. سیستم صف (Queue) لاراول این وظایف را به یک نوبت پردازش پس‌زمینه منتقل می‌کند تا پاسخ سریع به کاربر داده شود.

ابتدا باید یک درایور صف مانند database یا redis را در فایل .env تنظیم کنید:

QUEUE_CONNECTION=database
php artisan queue:table
php artisan migrate

سپس یک Job می‌سازیم:

php artisan make:job SendWelcomeEmail
class SendWelcomeEmail implements ShouldQueue
{
    protected $user;

    public function __construct(User $user)
    {
        $this->user = $user;
    }

    public function handle()
    {
        Mail::to($this->user->email)->send(new WelcomeMail($this->user));
    }
}

برای اضافه کردن این Job به صف به‌جای اجرای فوری آن:

SendWelcomeEmail::dispatch($user);

در نهایت باید یک Worker را اجرا کنید تا صف را پردازش کند:

php artisan queue:work

در محیط عملیاتی (production) معمولاً از ابزاری مانند Supervisor برای اجرای دائمی و مانیتور شدن این Worker استفاده می‌شود تا در صورت خطا به‌طور خودکار مجدداً اجرا شود.

برای ذخیره‌ی پیشرفت و شرکت در آزمون، وارد شوید — رایگان است.