باكدجات درس تعليمي

إتقان Laravel Horizon: إدارة ومراقبة متقدمة لطوابير لارافيل

Admin User
Admin User
Apr 28, 2026
6 دقيقة قراءة

Key Takeaways

  • # إتقان Laravel Horizon: إدارة ومراقبة متقدمة لطوابير لارافيل
  • غالبًا ما تعتمد تطبيقات Laravel على الطوابير لمعالجة المهام التي تستغرق وقتًا طويلاً في الخلفية،...

إتقان Laravel Horizon: إدارة ومراقبة متقدمة لطوابير لارافيل

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

يقدم Horizon رؤى فورية حول إنتاجية الطابور، ووقت التشغيل، وفشل المهام، مما يجعله أداة لا غنى عنها للتطبيقات التي تعتمد بشكل كبير على الطوابير.

المتطلبات الأساسية #

قبل التعمق في Horizon، تأكد من أن بيئة التطوير وتطبيق Laravel الخاص بك يفي بالمتطلبات التالية:

  • تطبيق Laravel 8.x أو أحدث.

  • PHP 7.4 أو أحدث.

  • Composer مثبتًا.

  • خادم Redis مثبتًا ومكونًا. يجب أن يكون برنامج تشغيل الطابور الافتراضي لـ Laravel (redis) مكونًا في ملف .env الخاص بك:

    QUEUE_CONNECTION=redis
    

التثبيت #

تثبيت Laravel Horizon أمر مباشر. أولاً، أضف الحزمة إلى مشروعك عبر Composer:

composer require laravel/horizon

بعد ذلك، انشر أصول وملفات تكوين Horizon باستخدام أمر Artisan horizon:install:

php artisan horizon:install

سيقوم هذا الأمر بنشر ملف التكوين config/horizon.php وتسجيل HorizonServiceProvider في ملف config/app.php الخاص بك. أخيرًا، قم بتشغيل عمليات الهجرة لإنشاء جداول قاعدة البيانات اللازمة التي يستخدمها Horizon لتخزين المقاييس والمهام الفاشلة:

php artisan migrate

التكوين #

ملف التكوين الرئيسي لـ Horizon هو config/horizon.php. يتيح لك هذا الملف تحديد المشرفين (supervisors)، والعاملين (workers)، وتكوينات محددة لبيئات مختلفة.

تشمل أقسام التكوين الرئيسية ما يلي:

  • environments: تحديد تكوينات طوابير مختلفة لبيئات مثل production، local، إلخ. يمكن أن تحتوي كل بيئة على عدة مشرفين، يدير كل منهم مجموعته الخاصة من العاملين والطوابير.

    // config/horizon.php
    
    'environments' => [
        'production' => [
            'supervisor-1' => [
                'connection' => 'redis',
                'queue' => ['default', 'emails'], // الطوابير التي سيعالجها هذا المشرف
                'balance' => 'auto', // استراتيجية الموازنة
                'processes' => 10,   // الحد الأقصى للعمليات لهذا المشرف
                'tries' => 3,        // عدد مرات إعادة محاولة المهمة
                'timeout' => 60,     // أقصى ثواني يمكن للمهمة تشغيلها
                'sleep' => 3,        // ثواني للنوم عند عدم توفر مهام
            ],
        ],
    
        'local' => [
            'supervisor-1' => [
                'connection' => 'redis',
                'queue' => ['default'],
                'balance' => 'simple',
                'processes' => 3,
                'tries' => 3,
            ],
        ],
    ],
    
  • balance: يحدد هذا الإعداد كيفية موازنة Horizon لعمليات العاملين عبر طوابيرك. يمكن أن يؤثر اختيار الاستراتيجية الصحيحة بشكل كبير على أداء تطبيقك.

    • simple: يوزع المهام الواردة بالتساوي بين العاملين المتاحين.
    • auto: يقوم Horizon تلقائيًا بضبط عدد العاملين لكل طابور بناءً على حمل الطابور والمهام المعلقة. يتطلب هذا التوسع الديناميكي PHP >= 7.1 وامتداد pcntl.
    • false: تعطيل الموازنة، مما يتيح لك تحديد عدد العمليات يدويًا لكل طابور.
  • metrics: يكوّن فترة الاحتفاظ ببيانات المقاييس والمهام الفاشلة، مما يساعدك على إدارة التخزين والأداء.

تشغيل Horizon #

لبدء تشغيل Horizon في بيئة التطوير الخاصة بك، ما عليك سوى تشغيل أمر Artisan:

php artisan horizon

سيؤدي هذا الأمر إلى بدء تشغيل عمال الطابور الخاصة بك وجعل لوحة تحكم Horizon قابلة للوصول. عادةً ما تكون لوحة التحكم متاحة على مسار /horizon في تطبيقك (على سبيل المثال، http://localhost:8000/horizon).

تأمين لوحة التحكم #

لبيئات الإنتاج، من الضروري تأمين الوصول إلى لوحة تحكم Horizon. يمكنك تقييد الوصول عن طريق تعريف بوابة ترخيص (authorization gate) في AuthServiceProvider الخاص بك:

// app/Providers/AuthServiceProvider.php

use Laravel\Horizon\Horizon;

/**
 * Register any authentication / authorization services.
 *
 * @return void
 */
public function boot()
{
    $this->registerPolicies();

    Horizon::auth(function ($request) {
        // إرجاع true للسماح بالوصول، و false للرفض.
        // على سبيل المثال، السماح فقط للمستخدمين الذين لديهم طريقة 'isAdmin' تُرجع true.
        return $request->user() && $request->user()->isAdmin();
    });
}

الميزات الرئيسية لـ Laravel Horizon #

يحتوي Laravel Horizon على العديد من الميزات المصممة لتبسيط إدارة الطوابير:

  1. نظرة عامة على لوحة التحكم: توفر ملخصًا فوريًا لطوابيرك، بما في ذلك إنتاجية المهام، والمهام الفاشلة، وحالة العاملين، وكل ذلك من واجهة مستخدم بديهية.

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

  3. المهام الفاشلة (Failed Jobs): يسمح لك قسم مخصص بعرض المهام الفاشلة، وإعادة محاولتها، أو حذفها. يمكنك تصفية المهام الفاشلة حسب نوع الاستثناء، أو الطابور، أو علامات محددة لتسهيل عملية التصحيح.

  4. المهام الحديثة (Recent Jobs): راقب المهام أثناء معالجتها، مع معلومات مفصلة حول حالتها (معلقة، قيد المعالجة، مكتملة، فاشلة)، وطابورها، وحمولتها الكاملة. هذا ممتاز لتصحيح أخطاء المهام الفردية.

  5. العلامات (Tags): يمكن لـ Horizon وضع علامات تلقائيًا على المهام بناءً على نماذج Eloquent المرفقة بها. تتيح لك هذه الميزة القوية تصفية سجل المهام حسب نماذج معينة (على سبيل المثال، جميع المهام المتعلقة بـ User بالمعرف 1). يمكنك أيضًا تعريف علامات لمهامك يدويًا:

    // app/Jobs/ProcessOrder.php
    
    class ProcessOrder implements ShouldQueue
    {
        use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
    
        public $order;
    
        public function __construct(Order $order)
        {
            $this->order = $order;
        }
    
        public function handle()
        {
            // معالجة الطلب...
        }
    
        public function tags()
        {
            return ['order:' . $this->order->id, 'user:' . $this->order->user->id];
        }
    }
    
  6. الإشعارات (Notifications): قم بتكوين Horizon لإشعارك عبر Slack أو البريد الإلكتروني عندما يكون للطابور وقت انتظار طويل بشكل غير عادي أو عندما تفشل دفعة من المهام، مما يتيح حل المشكلات بشكل استباقي.

    // app/Providers/AppServiceProvider.php (أو HorizonServiceProvider)
    
    use Laravel\Horizon\Horizon;
    
    public function boot()
    {
        // ...
    
        Horizon::routeSlackNotificationsTo('your-slack-webhook-url');
        Horizon::routeMailNotificationsTo('[email protected]');
    
        // مثال: إشعار إذا كان للطابور 'default' وقت انتظار يتجاوز دقيقة واحدة
        Horizon::waitCallbacks([
            function () {
                return Horizon::onQueue('default')->waits()->exceeding(1)->minutes();
            },
        ]);
    }
    

النشر في بيئة الإنتاج #

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

إليك مثال على تكوين supervisord (/etc/supervisor/conf.d/horizon.conf):

[program:horizon]
process_name=%(program_name)s
command=php /var/www/your-app/artisan horizon
autostart=true
autorestart=true
user=www-data             ; أو مستخدم خادم الويب الخاص بك (مثل 'nginx', 'forge')
redirect_stderr=true
stdout_logfile=/var/www/your-app/storage/logs/horizon.log
stopwaitsecs=3600         ; الانتظار حتى تنتهي المهام قبل الإيقاف (اختياري، لكن موصى به)

بعد إنشاء ملف التكوين أو تحديثه، قم بتحديث وبدء تشغيل supervisord:

sudo supervisorctl reread
sudo supervisorctl update
sudo supervisorctl start horizon

الخاتمة #

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

FAQs

ما هي الفائدة الرئيسية من استخدام Laravel Horizon بدلاً من طوابير Laravel الأصلية؟
يوفر Laravel Horizon لوحة تحكم جميلة وفورية لمراقبة طوابير Redis الخاصة بك، وتقديم رؤى حول إنتاجية المهام، والمهام الفاشلة، وأداء العاملين، وهو ما لا توفره طوابير Laravel الأصلية بشكل جاهز. إنه يبسط إدارة الطوابير وتصحيح الأخطاء بشكل كبير.
كيف أضمن تشغيل Laravel Horizon باستمرار في بيئة الإنتاج؟
لبيئات الإنتاج، يجب عليك استخدام مدير عمليات مثل Supervisord أو Systemd لإدارة عملية `php artisan horizon`. هذا يضمن بدء تشغيل Horizon تلقائيًا عند بدء تشغيل الخادم وإعادة تشغيله في حالة تعطله، مما يحافظ على معالجة الطوابير بشكل مستمر وموثوقية التطبيق.

Want more content like this?

Explore more tutorials in the باكدجات section.

Explore باكدجات

You might also like