Laravel Horizon لإدارة قوائم Redis في PHP: دليل شامل

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

Laravel Horizon: مراقبة وإدارة قوية لقوائم Redis في PHP

في تطوير الويب الحديث باستخدام PHP، أصبحت المعالجة غير المتزامنة للمهام عبر قوائم الانتظار معيارًا واقعيًا. يوفر Laravel دعمًا مدمجًا لقوائم الانتظار، ولكن عندما ينمو المشروع، يصبح إدارة عشرات العمال (workers) وتتبع أدائهم وتشخيص المشكلات أمرًا صعبًا. هنا يأتي دور Laravel Horizon — الأداة القوية لمراقبة وإدارة قوائم Redis.

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

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

التثبيت

يتم تثبيت Horizon عبر Composer — مدير الحزم القياسي لـ PHP. تأكد من تثبيت Composer وأن مشروعك يستخدم Laravel 5.5+.

composer require laravel/horizon

بعد تثبيت الحزمة، يجب نشر ملفات التكوين والأصول:

php artisan horizon:install

سينشئ هذا الأمر ملف التكوين config/horizon.php ويسجل مزود خدمة Horizon. سيتم أيضًا إنشاء ملف المسارات routes/horizon.php إذا كنت تستخدم Laravel 8+.

بعد ذلك، يجب إضافة المزود إلى config/app.php (إذا لم يتم إضافته تلقائيًا):

'providers' => [
    // مزودات أخرى...
    App\Providers\HorizonServiceProvider::class,
],

بعد ذلك، قم بتشغيل الترحيلات لإنشاء الجداول اللازمة لعمل Horizon (على الرغم من أن المنطق الرئيسي يستخدم Redis، إلا أن بعض البيانات تُخزن في قاعدة البيانات):

php artisan migrate

وأخيرًا، يجب إعداد Redis. تأكد من تثبيت وتشغيل خادم Redis، وأن ملف .env يحتوي على معلمات الاتصال الصحيحة:

REDIS_HOST=127.0.0.1
REDIS_PASSWORD=null
REDIS_PORT=6379

بداية سريعة: مثال عملي بسيط

بعد التثبيت والإعداد، يمكنك تشغيل Horizon فورًا ورؤيته أثناء العمل.

الخطوة 1: تشغيل Horizon

في الطرفية، نفذ الأمر التالي:

php artisan horizon

سترى كيف يقوم Horizon بتشغيل عدة عمليات عمال. افتراضيًا، يقوم بإنشاء ثلاث عمليات لمعالجة المهام من قائمة الانتظار default.

الخطوة 2: إنشاء مهمة لقائمة الانتظار

لننشئ مهمة بسيطة تحاكي عملية طويلة:

<?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;

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

    protected $podcastId;

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

    public function handle()
    {
        // محاكاة معالجة البودكاست
        logger("جارٍ معالجة البودكاست رقم: {$this->podcastId}");
        sleep(5); // محاكاة وقت المعالجة
        logger("تمت معالجة البودكاست رقم: {$this->podcastId}");
    }
}

الخطوة 3: إرسال المهمة إلى قائمة الانتظار

يمكنك إرسال المهمة من أي مكان في تطبيقك، على سبيل المثال من وحدة التحكم:

ProcessPodcast::dispatch(123);

بعد إرسال المهمة، توجه إلى لوحة تحكم Horizon على /horizon في متصفحك. ستشاهد المهمة وهي تُعالج في الوقت الفعلي، مع إحصائيات حول وقت التنفيذ وحالة العمال.

الخلاصة

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

توصيات