دستورات صف (Queue) در لاراول ۱۱

laravel 11 queue listen command
20 مرداد 1404


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


تو لاراول، با استفاده از دستورات صف، می‌تونیم به راحتی کارها رو به صف اضافه کنیم و سپس اونها رو به صورت ناهمزمان پردازش کنیم. در نسخه ۱۱ لاراول، چند بهبود و امکانات جدید اضافه شده که کار با صف‌ها رو راحت‌تر کرده. ما می‌تونیم وظایف رو به راحتی به صف اضافه کنیم و از کامند queue:listen برای گوش دادن به وظایف صف استفاده کنیم.


حالا بیایید با هم به یک مثال عملی نگاه کنیم. فرض کنید ما یک وظیفه برای ارسال ایمیل داریم. ابتدا یک کلاس وظیفه می‌سازیم و مشخصات ایمیل رو در اون قرار می‌دیم. بعد، وظیفه رو به صف اضافه می‌کنیم. با استفاده از کامند queue:listen می‌تونیم به صف گوش بدیم و وظایف رو به ترتیب پردازش کنیم. این خیلی بهینه و موثره!


بیاید با هم یک نمونه کد ببینیم که چطور می‌تونیم این کار رو انجام بدیم. اگر شما هم در پروژه‌هاتون به دنبال بهینه‌سازی کارها و کاهش زمان پاسخگویی هستید، استفاده از صف در لاراول به شدت توصیه می‌شه.


// ایجاد یک وظیفه جدید
php artisan make:job SendEmailJob

// کلاس وظیفه
namespace App\Jobs;

use Mail;
use App\Mail\SendEmail;
use Illuminate\Bus\Dispatcher;
use Illuminate\Foundation\Bus\Dispatchable;
use Illuminate\Contracts\Queue\ShouldQueue;

class SendEmailJob implements ShouldQueue
{
use Dispatchable;

protected $emailData;

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

public function handle()
{
Mail::to($this->emailData['to'])->send(new SendEmail($this->emailData));
}
}

// اضافه کردن وظیفه به صف
SendEmailJob::dispatch($emailData);

حالا بیایید کد بالا رو خط به خط بررسی کنیم:


خط ۱: ایجاد یک وظیفه جدید


php artisan make:job SendEmailJob با این دستور، ما یک کلاس جدید برای وظیفه ارسال ایمیل ایجاد می‌کنیم.


کلاس وظیفه


در این بخش ما یک کلاس برای وظیفه‌مون تعریف می‌کنیم که باید از ShouldQueue پیروی کنه تا مشخص کنیم که این وظیفه از طریق صف انجام می‌شه.


سازنده


در سازنده (__construct) این کلاس ما داده‌های ایمیل رو به عنوان پارامتر می‌گیریم.


متد پردازش (handle)


در این متد، ما از کلاس Mail برای ارسال ایمیل استفاده می‌کنیم و داده‌های مربوط به ایمیل رو ارسال می‌کنیم.


اضافه کردن وظیفه به صف


با استفاده از SendEmailJob::dispatch($emailData) ما وظیفه‌مون رو به صف اضافه می‌کنیم تا در زمان مناسب پردازش بشه.


سوالات متداول

؟

چطور می‌توانم یک وظیفه جدید در لاراول بسازم؟

؟

چگونه می‌توانم وظایف را به صف اضافه کنم؟

؟

چطور می‌توانم عملیات‌های طولانی را در لاراول به صف اضافه کنم؟

؟

چگونه می‌توانم وظایف صف را پردازش کنم؟

؟

آیا می‌توانم وضعیت وظایف مرجوعی را در لاراول بررسی کنم؟