سلام دوستای عزیز! امروز میخوایم درباره یکی از قابلیتهای فوقالعاده لاراول، یعنی دستورات صف یا 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)
ما وظیفهمون رو به صف اضافه میکنیم تا در زمان مناسب پردازش بشه.