国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

Horizon 隊列管理工具

Horizon 隊列管理工具


Laravel Horizon

介紹

Horizon 提供了一個漂亮的儀表盤,并且可以通過代碼配置你的 Laravel Redis 隊列,同時它允許你輕易的監(jiān)控你的隊列系統(tǒng)中諸如任務吞吐量,運行時間和失敗任務等關鍵指標。

所有的配置項都存放在一個簡單的配置文件中,從而允許你將它放在團隊的協(xié)同版本控制中,方便團隊協(xié)作。

1.png

安裝

{note} 你應該確保 queue 配置文件中設置了 redis 隊列驅(qū)動。

你應該使用 Composer 來安為你的 Laravel 項目安裝 Horizon:

composer require laravel/horizon

安裝完成后,使用 horizon:install 發(fā)布 Artisan 命令:

php artisan horizon:install

你還應該創(chuàng)建 failed_jobs 表,Laravel 將使用該表來存儲任何 失敗的隊列任務:

php artisan queue:failed-table

php artisan migrate

配置

發(fā)布 Horizon 相關文件后,他的主要配置文件會放在 config/horizon.php。你可以在這個文件中配置隊列相關選項,并且每個配置項都有詳細的使用說明,請詳細閱讀此文件。

均衡配置

Horizon 提供了三種均衡策略:simple,auto, 和 false。默認的是 simple , 會將收到的任務均分給隊列進程:

'balance' => 'simple',

auto 策略會根據(jù)當前的工作量調(diào)整每個隊列的工作進程任務數(shù)量。例如:如果 notifications 隊列有 1000 個待執(zhí)行任務,但是你的 render 隊列是空的,Horizon 會分配更多的工作進程給 notifications 隊列,直到 notifications 隊列中所有任務執(zhí)行完成。當配置項 balance  配置為 false 時,Horizon 會使用 Laravel 默認執(zhí)行行為,它將按照配置中列出的順序處理隊列任務。

任務修整

horizon 配置文件允許你配置應保留最近和失敗任務的時間(以分鐘為單位)。 默認情況下,最近的任務保留一小時,而失敗的任務保留一周:

'trim' => [
    'recent' => 60,    
    'failed' => 10080,
   ],

儀表盤權限驗證

Horizon 儀表盤路由是 /horizon。 默認情況下,你只能在 local 環(huán)境下訪問儀表盤。在你的 app/Providers/HorizonServiceProvider.php 文件中,有一個 gate 方法。這里授權控制 非本地 環(huán)境中對 Horizon 的訪問。 你可以根據(jù)需要隨意修改此門面,以限制對 Horizon 安裝的訪問:

/**
 * 注冊 Horizon gate 方法
 *
 * gate 決定了誰可以在非本地環(huán)境中訪問 Horizon。
 *
 * @return void
 */
 protected function gate(){
     Gate::define('viewHorizon', function ($user) { 
            return in_array($user->email, [   
                     'taylor@laravel.com',    
                     ]);  
                });
           }

運行 Horizon

當在 config/horizon.php 文件中配置好了你的隊列執(zhí)行進程后,你就可以使用 horizon Artisan 命令啟動 Horizon。只需要一條命令語句即可啟動所有配置好的隊列進程:

php artisan horizon

你也可以使用 horizon:pausehorizon:continue Artisan 命令來暫?;蚶^續(xù)執(zhí)行隊列任務:

php artisan horizon:pausephp artisan horizon:continue

你可以使用 horizon:terminate Artisan 命令優(yōu)雅的終止 Horizon 主進程。Horizon 會把正在執(zhí)行的任務處理完畢后退出:

php artisan horizon:terminate

部署 Horizon

如果你將 Horizon 部署到線上服務器時,則需要配置一個進程監(jiān)控器來檢測 php artisan horizon 命令,在它意外退出時自動重啟。上線新代碼時則需要該進程監(jiān)控器終止 Horizon 進程并以修改后的代碼重啟 Horizon。

Supervisor 配置

如果你使用 Supervisor 進程監(jiān)控器管理你的 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

{tip} 如果你不喜歡自己維護服務器,可以考慮使用 Laravel Forge,F(xiàn)orge 提供了運行一個帶有 Horizon 的現(xiàn)代、強大的 Laravel 應用所需要的 PHP7+ 及其他所有環(huán)境。

標簽

Horizon 允許你對任務分配「標簽」,包括郵件,事件廣播,通知和隊列的事件監(jiān)聽器。事實上,Horizon 會智能并且自動根據(jù)任務攜帶 Eloquent 模型給大多數(shù)任務標記標簽,如下任務示例:

<?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;  
     /**
     *  video 實例
     *
     * @var \App\Video
     */   
      public $video;   
    /**
     * 創(chuàng)建工作實例
     *
     * @param  \App\Video  $video
     * @return void
     */   
     public function __construct(Video $video) 
        {     
           $this->video = $video; 
         }   
    /**
     * 執(zhí)行任務
     *
     * @return void
     */  
      public function handle() 
         {     
            //  
          }
     }

如果該隊列任務是一個攜帶 id1App\Video 實例,那么它將自動被標記上 App\Video:1 標簽。因為 Horizon 會檢查任務屬性是否具有 Eloquent 模型,如果發(fā)現(xiàn) Eloquent 模型,Horizon 將會智能的用該模型的類名和主鍵為任務標記上標簽:

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

自定義標簽

如果你想手動的為隊列執(zhí)行的對象定義標簽,你可以給這個類定義一個 tags 方法:

class RenderVideo implements ShouldQueue{    
     /**
     * 獲取分配給這個任務的標簽
     *
     * @return array
     */    
     public function tags() 
        {    
            return ['render', 'video:'.$this->video->id]; 
        }
   }

通知

Note: 在使用通知之前,你應該添加 guzzlehttp/guzzle Composer 包到你的項目。 在使用 Horizon 配置發(fā)送短信通知時,你還應該閱讀  Nexmo 通知驅(qū)動的依賴條件章節(jié)。

如果需要在隊列等待時間過長時發(fā)起通知,可以在應用的  AppServiceProvider 中調(diào)用 Horizon::routeMailNotificationsTo, Horizon::routeSlackNotificationsTo, 和 Horizon::routeSmsNotificationsTo 方法:

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

配置等待時間過長的閾值

你可以在 config/horizon.php 配置文件中設置等待時間過長的具體秒數(shù)。waits 配置項可以針對每一個 鏈接 / 隊列 配置閾值:

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

Metrics

Horizon 包含一個 Metrics 儀表盤,它可以提供任務和隊列等待時間和吞吐量信息,為了填充此儀表盤,你需要配置應用的 scheduler 每五分鐘運行一次 Horizon 的 snapshot Artisan 命令:

/**
 * 定義應用程序的任務調(diào)度
 *
 * @param  \Illuminate\Console\Scheduling\Schedule  $schedule
 * @return void
 */
 protected function schedule(Schedule $schedule){
     $schedule->command('horizon:snapshot')->everyFiveMinutes();
     }
本文章首發(fā)在 LearnKu.com 網(wǎng)站上。