الفرق بين المراجعتين لصفحة: «Laravel/horizon»

من موسوعة حسوب
أنشأ الصفحة ب' = Laravel Horizon = == مقدمة == يوفّر Horizon لوحة تحكم جميلة و إعدادات برمجيّة لطوابير ‏‎(Queues) Laravel المبن...'
 
لا ملخص تعديل
 
(7 مراجعات متوسطة بواسطة مستخدمين اثنين آخرين غير معروضة)
سطر 1: سطر 1:
 
<noinclude>{{DISPLAYTITLE:Laravel Horizon}}</noinclude>
= Laravel Horizon =
 
== مقدمة ==
== مقدمة ==
يوفّر Horizon لوحة تحكم جميلة و إعدادات برمجيّة لطوابير ‏‎(Queues) Laravel المبنيّة على Redis، فهو يوفّر لك مراقبة سهلة للمقاييس الأساسية لنظام الطوابير مثل إنتاجيّة العمل ووقت التشغيل، وفشل المهام.
يوفّر Horizon لوحة تحكم جميلة و إعدادات برمجيّة لطوابير ‏‎(Queues) Laravel المبنيّة على [[Redis]]، فهو يوفّر لك مراقبة سهلة للمقاييس الأساسية لنظام الطوابير مثل إنتاجيّة العمل ووقت التشغيل، وفشل المهام.


ستبقى جميع عمليّات الضبط في ملف ضبط واحد وبسيط ممّا يضمن التعاون الكامل بين أعضاء فريقك.
ستبقى جميع عمليّات الضبط في ملف ضبط واحد وبسيط ممّا يضمن التعاون الكامل بين أعضاء فريقك.


== التثبيت ==
== التثبيت ==
تنبيه: يتطلّب ‎،Horizon نظرًا لاستخدامه لإشارات العمليّة غير متزامنة، إلى نسخة PHP‏ 7.1‏ فما فوق. ويجب عليك التأكّد من تعيين محرك الطابور إلى redis في ملف ضبط الطابور.
'''تنبيه''': يتطلّب ‎،Horizon نظرًا لاستخدامه لإشارات العمليّة غير متزامنة، إلى نسخة PHP‏ 7.1‏ فما فوق. ويجب عليك التأكّد من تعيين محرك الطابور إلى Redis في ملف ضبط الطابور.


يمكنك استخدام <code>Composer</code> لتثبيت Horizon في مشروع Laravel الخاص بك:<syntaxhighlight lang="bash">
يمكنك استخدام <code>Composer</code> لتثبيت Horizon في مشروع [[Laravel]] الخاص بك:<syntaxhighlight lang="bash">
composer require laravel/horizon
composer require laravel/horizon
</syntaxhighlight>
</syntaxhighlight>


بعد تثبيت Horizon، يمكننا استخدام أداة Artisan لنشر الأصول (Assets) باستخدام vendor:publish:<syntaxhighlight lang="bash">
بعد تثبيت Horizon، يمكننا استخدام أداة Artisan لنشر الأصول (Assets) باستخدام <code>vendor:publish</code>:<syntaxhighlight lang="bash">
php artisan vendor:publish --provider="Laravel\Horizon\HorizonServiceProvider"
php artisan vendor:publish --provider="Laravel\Horizon\HorizonServiceProvider"
</syntaxhighlight>
</syntaxhighlight>
سطر 22: سطر 20:


==== خيارات التوازن ====
==== خيارات التوازن ====
يسمح لك Horizon بالاختيار بين ثلاثة استراتيجيات توازن: simple و auto و false. تُقسّم الاستراتيجية simple (والتي هي الافتراضيّة) الوظائف الواردة بالتساوي بين العمليات:<syntaxhighlight lang="php">
يسمح لك Horizon بالاختيار بين ثلاثة استراتيجيات توازن: <code>simple</code> و <code>auto</code> و <code>false</code>. تُقسّم الاستراتيجية simple (والتي هي الافتراضيّة) الوظائف الواردة بالتساوي بين العمليات:<syntaxhighlight lang="php">
'balance' => 'simple',
'balance' => 'simple',
</syntaxhighlight>
</syntaxhighlight>


تضبط الاستراتيجيّة auto عدد عمليات العامل لكل طابور بالاعتماد على حجم العمل الحالي في قائمة الانتظار. فعلى سبيل المثال، إذا كان طابور notifications يحتوي على 1000 مهمة قيد الانتظار في حين أن طابور render فارغ، فسيخصص Horizon أكثر عمال لطابور notifications إلى أن ينتهي.
تضبط الاستراتيجيّة <code>auto</code> عدد عمليات العامل لكل طابور بالاعتماد على حجم العمل الحالي في قائمة الانتظار. فعلى سبيل المثال، إذا كان طابور notifications يحتوي على 1000 مهمة قيد الانتظار في حين أن طابور render فارغ، فسيخصص Horizon أكثر عمال لطابور notifications إلى أن ينتهي.


في حالة كان خيار التوازن false، فسيُستخدم سلوك Laravel الافتراضي، والذي يعالج الطوابير بالترتيب الموجود في ملف الضبط.
في حالة كان خيار التوازن <code>false</code>، فسيُستخدم سلوك [[Laravel]] الافتراضي، والذي يعالج الطوابير بالترتيب الموجود في ملف الضبط.


=== استيثاق لوحة التحكم ===
=== استيثاق لوحة التحكم ===
يعرض Horizon لوحة التحكم في ‎/horizon، ويمكنك الوصول إلى لوحة التحكم بشكل افتراضي من خلال البيئة المحليّة (local) فقط، ولتحديد سياسة وصول محددة أكثر للوحة التحكم، يمكنك استخدام التابع  <code>Horizon::auth</code>.
يعرض Horizon لوحة التحكم في <code>‎/horizon</code>، ويمكنك الوصول إلى لوحة التحكم بشكل افتراضي من خلال البيئة المحليّة (local) فقط، ولتحديد سياسة وصول محددة أكثر للوحة التحكم، يمكنك استخدام التابع  <code>Horizon::auth</code>.


يقبل التابع auth رد نداء (callback) والذي يُرجع القيمة <code>true</code> أو القيمة <code>false</code> للإشارة ما إذا كان المستخدم يمكنه الوصول إلى لوحة تحكم Horizon، وعادةً، يجب عليك استدعاء التابع <code>Horizon::auth</code> في التابع boot من <code>AppServiceProvider</code>:<syntaxhighlight lang="php">
يقبل التابع auth رد نداء (callback) والذي يُرجع القيمة <code>true</code> أو القيمة <code>false</code> للإشارة ما إذا كان المستخدم يمكنه الوصول إلى لوحة تحكم Horizon، وعادةً، يجب عليك استدعاء التابع <code>Horizon::auth</code> في التابع boot من <code>AppServiceProvider</code>:<syntaxhighlight lang="php">
سطر 40: سطر 38:


== تشغيل Horizon ==
== تشغيل Horizon ==
بمجرّد ضبط العاملين في ملف الضبط config/horizon.php، يمكنك بدء تشغيل Horizon باستخدام الأمر Artisan، وهذا الأمر المنفرد سيشغّل جميع العاملين المكوّنين:<syntaxhighlight lang="bash">
بمجرّد ضبط العاملين في ملف الضبط <code>config/horizon.php</code>، يمكنك بدء تشغيل Horizon باستخدام الأمر Artisan، وهذا الأمر المنفرد سيشغّل جميع العاملين المكوّنين:<syntaxhighlight lang="bash">
php artisan horizon
php artisan horizon
</syntaxhighlight>
</syntaxhighlight>
سطر 50: سطر 48:
</syntaxhighlight>
</syntaxhighlight>


يمكنك إنهاء عمل Horizon الرئيسي بأمان على جهازك باستخدام أمر Artisan horizon:terminate، وستكتمل أي مهام يعالجها Horizon ومن ثم سيتوقف:<syntaxhighlight lang="bash">
يمكنك إنهاء عمل Horizon الرئيسي بأمان على جهازك باستخدام أمر <code>horizon:terminate</code> Artisan، وستكتمل أي مهام يعالجها Horizon ومن ثم سيتوقف:<syntaxhighlight lang="bash">
php artisan horizon:terminate
php artisan horizon:terminate


سطر 60: سطر 58:
عند نشر شيفرات برمجيّة جديدة على خادمك، ستحتاج إلى إنهاء Horizon حتى تتمكن من إعادة تشغيله عن طريق مراقب العمليّة Supervisor وتلقي التغييرات الجديدة في الشيفرات البرمجيّة.
عند نشر شيفرات برمجيّة جديدة على خادمك، ستحتاج إلى إنهاء Horizon حتى تتمكن من إعادة تشغيله عن طريق مراقب العمليّة Supervisor وتلقي التغييرات الجديدة في الشيفرات البرمجيّة.


ضبط المشرف
==== ضبط المشرف ====
 
إذا كنتَ تستخدم برمجية Supervisor لمراقبة العمليات لكي تدير عملية Horizon. الخاصة بك، فهذا الملف سيكون كافيًا:<syntaxhighlight lang="php">
إذا كنتَ تستخدم برمجية Supervisor لمراقبة العمليات لكي تدير عملية Horizon. الخاصة بك، فهذا الملف سيكون كافيًا:<syntaxhighlight lang="php">
[program:horizon]
[program:horizon]
سطر 76: سطر 73:


== الوسوم ==
== الوسوم ==
يوفر لك Horizon إمكانيّة تعيين وسوم على الوظائف (jobs)، بما في ذلك البريد، وبث الأحداث والإشعارات ومستمعي الأحداث في الطابور. في الواقع، سيضع Horizon بشكل تلقائي وذكي الوسوم لمعظم الوظائف بالاعتماد على نماذج Eloquent المرتبطة بالوظيفة. فعلى سبيل المثال، ألقِ نظرة على المهمة التالية:<syntaxhighlight lang="php">
يوفر لك Horizon إمكانيّة تعيين وسوم على الوظائف (jobs)، بما في ذلك البريد، وبث الأحداث والإشعارات ومستمعي الأحداث في الطابور. في الواقع، سيضع Horizon بشكل تلقائي وذكي الوسوم لمعظم الوظائف بالاعتماد على نماذج [[Laravel/eloquent|Eloquent]] المرتبطة بالوظيفة. فعلى سبيل المثال، ألقِ نظرة على المهمة التالية:<syntaxhighlight lang="php">
<?php
<?php


سطر 129: سطر 126:


=== وضع الوسوم يدويًا ===
=== وضع الوسوم يدويًا ===
إذا كنت ترغب في تحديد الوسوم لأحد الكائنات التي يمكن أن تضعها على الطابور، فيمكنك تحديد التابع tags في الصنف:<syntaxhighlight lang="php">
إذا كنت ترغب في تحديد الوسوم لأحد الكائنات التي يمكن أن تضعها على الطابور، فيمكنك تحديد التابع <code>tags</code> في الصنف:<syntaxhighlight lang="php">
class RenderVideo implements ShouldQueue
class RenderVideo implements ShouldQueue
{
{
سطر 155: سطر 152:
ضبط الإشعارات للحدود القصوى لوقت الانتظار
ضبط الإشعارات للحدود القصوى لوقت الانتظار


يمكنك وضع عدد الثواني التي تُعتبر "وقت انتظار طويل" من خلال ملف الضبط config/horizon.php، ويتيح لك خيار الضبط waits داخل هذا الملف بالتحكم بأقصى حد للانتظار لكل تجميعة اتصال/طابور:<syntaxhighlight lang="php">
يمكنك وضع عدد الثواني التي تُعتبر "وقت انتظار طويل" من خلال ملف الضبط <code>config/horizon.php</code>، ويتيح لك خيار الضبط <code>waits</code> داخل هذا الملف بالتحكم بأقصى حد للانتظار لكل تجميعة اتصال/طابور:<syntaxhighlight lang="php">
'waits' => [
'waits' => [
     'redis:default' => 60,
     'redis:default' => 60,
سطر 178: سطر 175:
== مصادر ==
== مصادر ==
* [https://laravel.com/docs/5.6/horizon صفحة Horizon في توثيق Laravel الرسمي].
* [https://laravel.com/docs/5.6/horizon صفحة Horizon في توثيق Laravel الرسمي].
[[تصنيف:Laravel|{{SUBPAGENAME}}]]
[[تصنيف:Laravel Official Packages|{{SUBPAGENAME}}]]

المراجعة الحالية بتاريخ 14:18، 23 أكتوبر 2018

مقدمة

يوفّر Horizon لوحة تحكم جميلة و إعدادات برمجيّة لطوابير ‏‎(Queues) Laravel المبنيّة على Redis، فهو يوفّر لك مراقبة سهلة للمقاييس الأساسية لنظام الطوابير مثل إنتاجيّة العمل ووقت التشغيل، وفشل المهام.

ستبقى جميع عمليّات الضبط في ملف ضبط واحد وبسيط ممّا يضمن التعاون الكامل بين أعضاء فريقك.

التثبيت

تنبيه: يتطلّب ‎،Horizon نظرًا لاستخدامه لإشارات العمليّة غير متزامنة، إلى نسخة PHP‏ 7.1‏ فما فوق. ويجب عليك التأكّد من تعيين محرك الطابور إلى Redis في ملف ضبط الطابور.

يمكنك استخدام Composer لتثبيت Horizon في مشروع Laravel الخاص بك:

composer require laravel/horizon

بعد تثبيت Horizon، يمكننا استخدام أداة Artisan لنشر الأصول (Assets) باستخدام vendor:publish:

php artisan vendor:publish --provider="Laravel\Horizon\HorizonServiceProvider"

الضبط

سيتكوّن ملف الضبط الأساسي في config/horizon.php بعد نشر أصول Horizon، ويسمح لك هذا الملف بضبط خيارات العامل ويحتوي كل خيار ضبط على وصف لعمله، لذا تأكّد من الاطلاع على هذا الملف بشكل جيّد.

خيارات التوازن

يسمح لك Horizon بالاختيار بين ثلاثة استراتيجيات توازن: simple و auto و false. تُقسّم الاستراتيجية simple (والتي هي الافتراضيّة) الوظائف الواردة بالتساوي بين العمليات:

'balance' => 'simple',

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

في حالة كان خيار التوازن false، فسيُستخدم سلوك Laravel الافتراضي، والذي يعالج الطوابير بالترتيب الموجود في ملف الضبط.

استيثاق لوحة التحكم

يعرض Horizon لوحة التحكم في ‎/horizon، ويمكنك الوصول إلى لوحة التحكم بشكل افتراضي من خلال البيئة المحليّة (local) فقط، ولتحديد سياسة وصول محددة أكثر للوحة التحكم، يمكنك استخدام التابع  Horizon::auth.

يقبل التابع auth رد نداء (callback) والذي يُرجع القيمة true أو القيمة false للإشارة ما إذا كان المستخدم يمكنه الوصول إلى لوحة تحكم Horizon، وعادةً، يجب عليك استدعاء التابع Horizon::auth في التابع boot من AppServiceProvider:

Horizon::auth(function ($request) {
   // return true / false;
});

تشغيل Horizon

بمجرّد ضبط العاملين في ملف الضبط config/horizon.php، يمكنك بدء تشغيل Horizon باستخدام الأمر Artisan، وهذا الأمر المنفرد سيشغّل جميع العاملين المكوّنين:

php artisan horizon

يمكنك إيقاف عمل Horizon بشكل مؤقت واستئناف عمل المهام باستخدام أوامر Artisan وهي horizon:pause و horizon:continue:

php artisan horizon:pause

php artisan horizon:continue

يمكنك إنهاء عمل Horizon الرئيسي بأمان على جهازك باستخدام أمر horizon:terminate Artisan، وستكتمل أي مهام يعالجها Horizon ومن ثم سيتوقف:

php artisan horizon:terminate

نشر Horizon على الخادم الإنتاجي

إذا كنت ترغب في نشر Horizon على الخادم الإنتاجي، فيجب عليك ضبط مراقب العمليّة (process monitor) لمراقبة أمر php artisan horizon وإعادة تشغيله إذا انتهى بشكل غير متوقع.

عند نشر شيفرات برمجيّة جديدة على خادمك، ستحتاج إلى إنهاء Horizon حتى تتمكن من إعادة تشغيله عن طريق مراقب العمليّة Supervisor وتلقي التغييرات الجديدة في الشيفرات البرمجيّة.

ضبط المشرف

إذا كنتَ تستخدم برمجية Supervisor لمراقبة العمليات لكي تدير عملية Horizon. الخاصة بك، فهذا الملف سيكون كافيًا:

[program:horizon]
process_name=%(program_name)s
command=php /home/forge/app.com/artisan horizon
autostart=true
autorestart=true
user=forge
redirect_stderr=true
stdout_logfile=/home/forge/app.com/horizon.log

ملاحظة: فكر في استخدام Laravel Forge إذا كنت لا ترغب في إدارة خوادمك الخاصة، فهو يوفّر لك خوادم PHP 7+‎ مع كل ما تحتاجه لتشغيل تطبيقات Laravel حديثة وقويّة مع Horizon.

الوسوم

يوفر لك Horizon إمكانيّة تعيين وسوم على الوظائف (jobs)، بما في ذلك البريد، وبث الأحداث والإشعارات ومستمعي الأحداث في الطابور. في الواقع، سيضع Horizon بشكل تلقائي وذكي الوسوم لمعظم الوظائف بالاعتماد على نماذج Eloquent المرتبطة بالوظيفة. فعلى سبيل المثال، ألقِ نظرة على المهمة التالية:

<?php

namespace App\Jobs;

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

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

    /**
     * هذا مثيل الفيديو.
     *
     * @var \App\Video
     */
    public $video;

    /**
     * إنشاء مثيل مهمة جديد.
     *
     * @param  \App\Video  $video
     * @return void
     */
    public function __construct(Video $video)
    {
        $this->video = $video;
    }

    /**
     * تنفيذ المهمة.
     *
     * @return void
     */
    public function handle()
    {
       //
    }
}

إذا وُضعت وظيفة في الطابور مع نسخة App\Video التي تملك معرّف يساوي 1، فستحصل بشكل تلقائي على الوسم App\Video:1. وهذا لأن Horizon سيدرس خصائص الوظيفة لأي نموذج Eloquent، فإذا وُجد نموذج Eloquent، سيضع Horizon الوسم بذكاء في الوظيفة باستخدام اسم صنف النموذج والمفتاح الرئيسي.

$video = App\Video::find(1);

App\Jobs\RenderVideo::dispatch($video);

وضع الوسوم يدويًا

إذا كنت ترغب في تحديد الوسوم لأحد الكائنات التي يمكن أن تضعها على الطابور، فيمكنك تحديد التابع tags في الصنف:

class RenderVideo implements ShouldQueue
{
    /**
     * للحصول على الوسوم المستندة إلى المهمة
     *
     * @return array
     */
    public function tags()
    {
        return ['render', 'video:'.$this->video->id];
    }
}

الإشعارات

ملاحظة: قبل استخدام الإشعارات، يجب عليك إضافة حزمة guzzlehttp/guzzle Composer إلى مشروعك، وعند تهيئة Horizon لإرسال إشعارات SMS، يجب عليك في هذه الحالة مراجعة المتطلبات الأساسيّة لبرنامج تشغيل الإشعارات Nexmo.

إذا كنت ترغب في أن تُعلم عندما يكون وقت انتظار إحدى الطوابير طويل، فيمكنك استخدام توابع Horizon::routeMailNotificationsTo و Horizon::routeSlackNotificationsTo وHorizon::routeSmsNotificationsTo، ويمكنك استدعاء هذه التوابع من مقدّم الخدمة AppServiceProvider الخاص بك:

Horizon::routeMailNotificationsTo('example@example.com');
Horizon::routeSlackNotificationsTo('slack-webhook-url', '#channel');
Horizon::routeSmsNotificationsTo('15556667777');

ضبط الإشعارات للحدود القصوى لوقت الانتظار

يمكنك وضع عدد الثواني التي تُعتبر "وقت انتظار طويل" من خلال ملف الضبط config/horizon.php، ويتيح لك خيار الضبط waits داخل هذا الملف بالتحكم بأقصى حد للانتظار لكل تجميعة اتصال/طابور:

'waits' => [
    'redis:default' => 60,
],

المقاييس Metrics

يحتوي Horizon على لوحة تحكم بالمقاييس التي توفر المعلومات عن وظيفتك ووقت انتظار الطابور والإنتاجيّة (throughput). ولتعبئة لوحة التحكم، يجب ضبط أمر Artisan snapshot للعمل كل خمسة دقائق عبر مجدول التطبيق الخاص بك:

/**
 * تعريف أمر التطبيق schedule.
 *
 * @param  \Illuminate\Console\Scheduling\Schedule  $schedule
 * @return void
 */
protected function schedule(Schedule $schedule)
{
    $schedule->command('horizon:snapshot')->everyFiveMinutes();
}

مصادر