Horizon キュー管理ツール
- ##構成 #バランスのとれた構成
- タスクのトリミング
- ダッシュボードの権限の確認タグ
- メトリクス
- 概要
- インストール
- Horizon の実行
- #タグ
- 通知
- メトリクス
Laravel Horizon
Horizon は美しいダッシュボードを提供し、コードを通じて Laravel Redis キューを構成でき、キュー システムを簡単に監視できます。タスク スループット、ランタイムなどの主要なメトリクス、失敗したタスク。
すべての構成項目は単純な構成ファイルに保存されるため、チームの共同バージョン管理に配置してチームの共同作業を容易にすることができます。
インストール
{note}
queue
がredis
に設定されていることを確認する必要があります。設定ファイル キュードライバー。
Laravel プロジェクトに Horizon をインストールするには Composer を使用する必要があります:
composer require laravel/horizon
インストールが完了したら、horizon:install
を使用して Artisan コマンドを発行します。
php artisan horizon:install
また、Laravel が失敗したキュー ジョブを保存するために使用する failed_jobs
テーブルも作成する必要があります。 # 構成
Horizon 関連ファイルを公開すると、メインの構成ファイルは config/horizon.php に配置されます。このファイルではキュー関連のオプションを設定することができ、各設定項目には詳しい使用方法が記載されていますので、このファイルをよく読んでください。
バランスの取れた構成
Horizon は、simple
、
、
false という 3 つのバランス戦略を提供します。デフォルトは simple
で、受信したタスクをキュー プロセスに均等に分配します。 php artisan queue:failed-table
php artisan migrate
auto
この戦略は、現在のタスクに従って各キューの作業を調整します。 workload プロセスタスクの数。例: notifications
キューに 1000 個の保留中のタスクがあるが、
キューが空の場合、Horizon は、すべてのタスクがなくなるまで、より多くのワーカー プロセスを notifications
キューに割り当てます。 notifications
キュー内のタスクが完了しました。構成項目 balance
が false
に構成されている場合、Horizon は Laravel のデフォルトの実行動作を使用し、構成にリストされている順序でキュータスクを処理します。 タスクのプルーニング
horizon
構成ファイルを使用すると、最近のタスクと失敗したタスクを保持する期間 (分単位) を構成できます。デフォルトでは、最近のタスクは 1 時間保持され、失敗したタスクは 1 週間保持されます。
'balance' => 'simple',
##ダッシュボード権限の確認
/horizon です。デフォルトでは、local
環境でのみダッシュボードにアクセスできます。app/Providers/HorizonServiceProvider.php
ファイルには、gate メソッドがあります。この承認は、
非ローカル環境での Horizon へのアクセスを制御します。必要に応じて、このファサードを自由に変更して、Horizon インストールへのアクセスを制限できます。
'trim' => [ 'recent' => 60, 'failed' => 10080, ],
Run HorizonWhen in config /horizon.php ファイルでキュー実行プロセスを構成した後、horizon
Artisan コマンドを使用して Horizon を起動できます。構成されているすべてのキュー プロセスを開始するには、コマンド ステートメントが 1 つだけ必要です:/**
* 注册 Horizon gate 方法
*
* gate 决定了谁可以在非本地环境中访问 Horizon。
*
* @return void
*/
protected function gate(){
Gate::define('viewHorizon', function ($user) {
return in_array($user->email, [
'taylor@laravel.com',
]);
});
}
horizon:pause および
horizon:Continue アーティザン コマンドを使用して、一時停止または続行することもできます。キュー タスクの実行:
php artisan horizon
horizon:terminate Artisan コマンドを使用して、Horizon メイン プロセスを正常に終了できます。 Horizon は、実行中のタスクを処理した後に終了します:
php artisan horizon:pausephp artisan horizon:continue
Horizon のデプロイ
Horizon をオンライン サーバーにデプロイする場合は、php Artisan Horizon
コマンドを検出し、予期せず終了したときに自動的に再起動するようにプロセス モニターを構成する必要があります。新しいコードが起動されると、プロセス モニターは Horizon プロセスを終了し、変更されたコードで Horizon を再起動する必要があります。
スーパーバイザー構成
スーパーバイザー プロセス モニターを使用して horizon
プロセスを管理する場合、次の構成ファイルがニーズを満たします:
php artisan horizon:terminate
{ヒント} 自分でサーバーを保守したくない場合は、Laravel Forge の使用を検討できます。Forge は、Horizon で最新の強力な Laravel アプリケーションを実行するために必要な PHP7 およびその他すべての環境を提供します。
タグ
Horizon では、電子メール、イベント ブロードキャスト、通知、キューに登録されたイベントなどのタスクに「タグ」を割り当てることができます。リスナー、デバイス。実際、Horizon は、次のタスク例にあるように、タスクに含まれる Eloquent モデルに基づいて、ほとんどのタスクにインテリジェントかつ自動的にラベルを付けます。
[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
キュー タスクが id
を含むタスクの場合が 1
の App\Video
インスタンスである場合、自動的に App\Video:1
タグが付けられます。 Horizon はタスク属性に Eloquent モデルがあるかどうかをチェックするため、Eloquent モデルが見つかった場合、Horizon はモデルのクラス名と主キーを使用してタスクにインテリジェントにタグ付けします:
<?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; /** * 创建工作实例 * * @param \App\Video $video * @return void */ public function __construct(Video $video) { $this->video = $video; } /** * 执行任务 * * @return void */ public function handle() { // } }
カスタム タグ
キューに入れられたオブジェクトのタグを手動で定義する場合は、このクラスの tags
メソッドを定義できます:
$video = App\Video::find(1); App\Jobs\RenderVideo::dispatch($video);
Notification
注: 通知を使用する前に、
guzzlehttp/guzzle
Composer パッケージをプロジェクトに追加する必要があります。 Horizon を使用して SMS 通知の送信を構成する場合は、Nexmo 通知ドライバーの依存関係 の章も読む必要があります。
キューの待機時間が長すぎるときに通知を開始する必要がある場合は、アプリケーションの で
Horizon::routeMailNotificationsTo、
Horizon: を呼び出すことができます。 AppServiceProvider :routeSlackNotificationsTo
、および Horizon::routeSmsNotificationsTo
メソッド:
class RenderVideo implements ShouldQueue{ /** * 获取分配给这个任务的标签 * * @return array */ public function tags() { return ['render', 'video:'.$this->video->id]; } }
超過待機時間のしきい値の構成
これは ## で構成できます。 #config/horizon.php 待機時間が長すぎる場合の具体的な秒数を設定ファイルに設定します。
waits 構成項目では、各リンク/キューのしきい値を構成できます。
Horizon::routeMailNotificationsTo('example@example.com'); Horizon::routeSlackNotificationsTo('slack-webhook-url', '#channel'); Horizon::routeSmsNotificationsTo('15556667777');MetricsHorizon には、メトリック インストゥルメント ダッシュボードが含まれています, タスクとキューの待機時間とスループット情報を提供できます。このダッシュボードにデータを入力するには、Horizon の
snapshot Artisan コマンドを 5 分ごとに実行するようにアプリケーションのスケジューラを構成する必要があります:
'waits' => [ 'redis:default' => 60, ],