
シェア:
Husband to @abigailotwell. Web Developer. Founder of Laravel, Forge, Envoyer, Spark, and more.
NexmoとLaravel Horizonによるキュー待ち時間の通知
Webアプリケーションは、電子メールの送信、アップロードされたファイルの処理、APIの呼び出しなど、計算コストが高く、時間のかかるタスクを実行する必要があります。ユーザーのウェブ・リクエスト中にこれらのタスクを実行すると、ウェブ・アプリケーションが遅く不便に感じられ、ユーザーにとってフラストレーションとなります。
そのため、ウェブリクエスト中にこれらのタスクを実行する代わりに、ジョブキューに追加し、キュー「ワーカー」によって後で処理することができます。Laravelフレームワークには、キューに入れられたジョブや、それらのジョブを処理するワーカーの起動がサポートされています。さらに Laravel Horizonパッケージは、キューの監視やワーカーの負荷分散などのためのユーザーインターフェイスを追加することで、Laravelのキューシステムを強化します。Horizon は Redisを利用し、保留中のジョブ、処理済みのジョブ、失敗したジョブ、平均処理時間やキューの待ち時間などのメトリクスを追跡します。
しかし、ひとたびアプリケーションがバックグラウンドキューを利用するようになると、トラフィックの急増によってジョブがキューにすぐに溜まってしまうことがあります。そのキューに割り当てられるワーカーが十分でない場合、ジョブは処理されるまでにキューで長い待ち時間を抱えることになります。
Nexmoで解決Laravel Horizonに組み込まれているイベントと通知サービスを活用することで、キューの待ち時間が指定したしきい値を超えたときに、HorizonにSMSメッセージを送信するように指示することができます。
Nexmoクライアントのインストールと設定
まず、アプリケーション用にNexmoサービスを設定しましょう。Laravelの通知サービスには、Nexmoを使ってSMSメッセージを送信するサポートが既に組み込まれています。しかし、設定ファイルに数行の設定を追加する必要があります。 config/services.php設定ファイルに追加する必要があります:
'nexmo' => [
'key' => env('NEXMO_KEY'),
'secret' => env('NEXMO_SECRET'),
'sms_from' => 'virtual-phone-number',
],
これらの設定オプションを config/services.php設定ファイルを追加したら NEXMO_KEYと NEXMO_SECRET環境変数がアプリケーションの .envファイルに追加する必要があります。これらの設定値は アカウント設定から取得できます。.
また sms_from設定値はNexmoバーチャル番号の1つと一致するように変更する必要があります。これはSMSメッセージが送信される電話番号です。
次に nexmo/clientパッケージをインストールする必要がある。これはターミナルで "composer require "コマンドを使って行う:
composer require nexmo/client素晴らしい!Nexmoクライアントのインストールと設定が完了しました。次にHorizonをインストールしましょう。
Laravel Horizonのインストールと設定
Laravel Horizonをインストールするために、Composerを使って laravel/horizonパッケージをインストールします:
composer require laravel/horizonComposerがHorizonをインストールし終わったら、Horizonの設定ファイルを公開する必要があります。これは Laravel の vendor:publishArtisan CLI コマンドを使用します:
php artisan vendor:publish --provider="Laravel\Horizon\HorizonServiceProvider"これでホライゾンはインストールされた!しかし、次に進む前に defaultドライバの設定が config/queue.phpに設定されていることを確認してください。 redis.
設定待ち時間のしきい値
次に、キュー待ち時間のしきい値を設定します。待ち行列の待ち時間がこの閾値を超えた場合、その状況を知らせるSMSメッセージを受信するようにします。そのためには wait設定ファイル内の config/horizon.phpオプションで、キュー待ち時間のしきい値の最大値を秒単位で指定することができます。デフォルトでは、この閾値は60秒に設定されていますが、アプリケーションの必要性に応じてこの値を自由に変更することができます。
'waits' => [
'redis:default' => 60,
],
Nexmo SMS通知の設定
最後に、キューの待ち時間のしきい値を超えたときに SMS メッセージを実際に送信するように Horizon に指示する準備ができました。アプリケーションの bootアプリケーションの AppServiceProviderクラスのメソッド内に、次のコードを追加します:
\Laravel\Horizon\Horizon::routeSmsNotificationsTo(
'your-phone-number'
);もちろん your-phone-numberは待ち時間のSMS通知を送る電話番号に置き換えてください。
以上です!アプリケーションのキュー待ち時間を超えると、Nexmo経由で待ち時間が長いことを知らせるSMSが届きます。それに応じて、キューワーカーのキャパシティを素早く増やし、問題を解決することができます!
HorizonとNexmoを使ったデモアプリケーションは 私の GitHub.