كيفية استخدام Laravel Queues للمهام الخلفية

Amine
30/08/2024

المقدمة

يُعد نظام الطوابير (Queues) في Laravel طريقة قوية لإدارة المهام الخلفية، مما يساعد في تحسين الأداء العام للتطبيقات عن طريق تأخير معالجة المهام الثقيلة إلى وقت لاحق. يمكن استخدام الطوابير لإرسال رسائل البريد الإلكتروني، معالجة الصور، إنشاء تقارير، والكثير من المهام الأخرى التي يمكن تشغيلها في الخلفية. باستخدام الطوابير، يمكنك التأكد من أن طلبات المستخدم تظل سريعة، بينما يتم تنفيذ المهام الثقيلة في الخلفية.

الخطوة 1: إعداد نظام الطوابير (Queues) في Laravel

قبل البدء في استخدام الطوابير، تحتاج إلى إعداد نظام الطوابير في Laravel. يدعم Laravel عدة خدمات للطوابير مثل Redis، Database، Amazon SQS، وBeanstalkd. في هذا الدليل، سنستخدم خيار database لتخزين المهام في قاعدة البيانات.

أولاً، تأكد من أن لديك جدول قاعدة البيانات اللازم لتخزين المهام. يمكنك إنشاء جدول الطوابير باستخدام الأمر التالي:

php artisan queue:table

بعد إنشاء ملف الترحيل (Migration)، قم بتشغيل الترحيلات لإنشاء الجدول:

php artisan migrate

الآن، يجب عليك تحديث إعدادات الطوابير في ملف .env لتعيين نوع الطابور إلى database:

QUEUE_CONNECTION=database

الخطوة 2: إنشاء وظيفة (Job) جديدة

لإنشاء وظيفة جديدة لتشغيلها في الخلفية، يمكنك استخدام الأمر make:job لإنشاء ملف وظيفة (Job) جديد. لنقم بإنشاء وظيفة ترسل رسالة بريد إلكتروني:

php artisan make:job SendEmailJob

سيتم إنشاء ملف SendEmailJob.php في مجلد app/Jobs. افتح هذا الملف وأضف الكود التالي لإعداد الوظيفة:

<?php

namespace App\Jobs;

use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Queue\SerializesModels;
use App\Mail\WelcomeEmail;
use Mail;

class SendEmailJob implements ShouldQueue
{
    use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;

    public $email;

    /**
     * Create a new job instance.
     *
     * @return void
     */
    public function __construct($email)
    {
        $this->email = $email;
    }

    /**
     * Execute the job.
     *
     * @return void
     */
    public function handle()
    {
        Mail::to($this->email)->send(new WelcomeEmail());
    }
}

في هذا المثال، تقوم وظيفة SendEmailJob بإرسال رسالة بريد إلكتروني ترحيبية إلى عنوان البريد الإلكتروني المحدد. يمكنك تخصيص الوظيفة لتنفيذ مهام أخرى حسب الحاجة.

الخطوة 3: تشغيل الوظيفة في الخلفية

لتشغيل الوظيفة في الخلفية، يمكنك استخدام طريقة dispatch لتوزيع الوظيفة على الطابور. على سبيل المثال، يمكنك تشغيل الوظيفة عند تسجيل المستخدم الجديد في متحكم التسجيل:

use App\Jobs\SendEmailJob;

public function register(Request $request)
{
    $user = User::create([
        'name' => $request->name,
        'email' => $request->email,
        'password' => bcrypt($request->password),
    ]);

    // توزيع الوظيفة على الطابور
    SendEmailJob::dispatch($user->email);

    return redirect('/home')->with('success', 'تم التسجيل بنجاح وسيتم إرسال بريد إلكتروني ترحيبي.');
}

سيتم وضع الوظيفة في الطابور وسيتم تشغيلها في الخلفية بواسطة معالج الطوابير (Queue Worker).

الخطوة 4: تشغيل معالج الطوابير (Queue Worker)

لتنفيذ المهام الموجودة في الطابور، يجب عليك تشغيل معالج الطوابير. يمكنك تشغيل معالج الطوابير باستخدام الأمر التالي:

php artisan queue:work

سيقوم معالج الطوابير بتنفيذ المهام الموجودة في الطابور بشكل متزامن. يمكنك تشغيل هذا الأمر في نافذة سطر أوامر مستقلة أو تشغيله كخدمة نظام لتعمل دائمًا في الخلفية.

الخطوة 5: جدولة المهام المستقبلية باستخدام التأخير (Delay)

يمكنك أيضًا جدولة المهام ليتم تشغيلها في وقت لاحق باستخدام ميزة delay. لنقم بتحديث مثالنا لتأخير إرسال البريد الإلكتروني لمدة 10 دقائق:

SendEmailJob::dispatch($user->email)->delay(now()->addMinutes(10));

سيتم وضع الوظيفة في الطابور ولكن لن يتم تنفيذها حتى تمر 10 دقائق.

الخطوة 6: التعامل مع حالات الفشل في الطوابير

إذا فشلت وظيفة في الطابور، يمكنك التعامل مع حالة الفشل باستخدام دالة failed في فئة الوظيفة. لنقم بإضافة دالة failed إلى مثال SendEmailJob:

public function failed(Exception $exception)
{
    // سجل الخطأ أو قم بإرسال إشعار
    \Log::error('فشلت عملية إرسال البريد الإلكتروني إلى ' . $this->email);
}

سيتم استدعاء هذه الدالة تلقائيًا إذا فشلت الوظيفة أثناء تنفيذها.

الخاتمة

تعد الطوابير في Laravel أداة قوية لتحسين الأداء عن طريق تشغيل المهام الثقيلة في الخلفية. من خلال استخدام الطوابير، يمكنك التأكد من أن تطبيقك يظل سريعًا وسلسًا للمستخدمين النهائيين. سواء كنت ترسل رسائل البريد الإلكتروني، تعالج الصور، أو تنفذ مهام أخرى ثقيلة، فإن الطوابير تساعدك على توزيع الحمل وتحسين الأداء. استمر في استكشاف ميزات Laravel المختلفة لتعزيز تطبيقاتك وتحسين أدائها.

لمزيد من المعلومات، يمكنك زيارة المستندات الرسمية للارافيل.

التعليقات

اترك تعليقاً