Web アプリケーションの継続的な開発に伴い、多数の同時リクエストを処理することが Web 開発における重要な課題となっています。アプリケーションのパフォーマンスと安定性を向上させ、同時実行の問題を解決するために、キューはタスクを処理するための一般的な方法になりました。高速、シンプル、柔軟、高性能の PHP フレームワークとして、ThinkPHP6 は完全なキュー ソリューションも提供します。この記事では、ThinkPHP6 でキュー監視を実装する方法を紹介します。
1. アイデア
ThinkPHP6 は、デフォルトで、Redis とデータベース キューという 2 つのキュー ドライバーを統合します。キューを使用する場合、タスクをキューに追加し、デーモン プロセスを起動して、キュー内に実行する必要のあるタスクがあるかどうかを監視する必要があります。しかし、キューを使用すると、タスクの実行の失敗や例外が頻繁に発生します。キュー監視メカニズムがなければ、これらの問題は大きな問題を引き起こすことになります。したがって、ThinkPHP6 でキュー監視を実装する必要があります。
2. 実装プロセス
1. コマンドの追加
まず、プロジェクトのルート ディレクトリに Artisan コマンドを作成して、すべてのキュー タスク情報を取得し、その情報を Return に転送します。 JSON形式で。
<?php namespace appcommand; use thinkrtisanCommand; use thinkconsoleInput; use thinkconsoleOutput; class QueueMonitor extends Command { protected function configure() { $this->setName('queue:monitor')->setDescription('get all queue job info'); } protected function execute(Input $input, Output $output) { //获取所有队列任务信息 $info = queue()->getMonitorInfo(); //以JSON格式返回信息 $output->writeln(json_encode($info)); } }
2.コマンドの登録
アプリケーション初期化ファイルapp.phpに、コマンドの登録を完了します。
<?php //注册命令 return [ 'commands' => [ appcommandQueueMonitor::class, ], ];
3. ルーティングの追加
ルーティング設定ファイルroute.phpに、キュー監視コマンドにアクセスするためのルートを追加します。ここでは、RESTful API アクセスを使用していることを前提としています。
<?php //定义路由 use thinkacadeRoute; Route::get('/queue/monitor', 'queue/monitor');
4. コントローラーの追加
キュー コントローラーを作成し、コントローラーにmonitor() メソッドを実装し、ルーティングからのリクエストを受け入れ、対応するキュー監視コマンドを呼び出します。
public function monitor() { //执行队列监控命令 hinkacadeArtisan::call('queue:monitor'); //将命令执行结果转换为数组格式 $outputData = json_decode( hinkacadeArtisan::output(), true); if (empty($outputData)) { return json(['code' => -1, 'msg' => 'No Data']); } return json(['code' => 1, 'msg' => 'Success', 'data' => $outputData]); }
ここまでで、単純なキュー監視機能が完成しました。http://yourdomain.com/queue/monitor
にアクセスすると、すべてのキュー タスクに関する情報を取得できます。
3. 問題への対応
実際の開発では、キュー監視で次のような問題が発生することがよくあります。プロセスがタスクを実行中に例外が発生した場合、例外をスローして例外ログを記録することで処理することも、例外の種類に応じて異なる処理を行うこともできます。ここでは、タスク処理の参考として、異常または失敗したタスクを記録できます。
2. タスクの繰り返し処理
タスクが実行のために取り出されて、処理中にネットワークが中断されたり、サーバーが予期せずクラッシュした場合、キュー監視プロセスは、タスクが実行されていると判断します。タスクがまだ実行されていません。再度取り出して実行してください。したがって、キュー内の実行済みタスクのマーキングを実装し、タスクを取り出す前にそのタスクが実行されたかどうかを検出する必要があります。
3. 監視時間
キューの監視時間も考慮する必要がある問題です。キュー リスナー プロセスは、すべてのキュー タスクが処理されるまで実行し続ける必要があります。実行時間が長いキュー リスニング プロセスの場合、プロセス例外や強制シャットダウンを回避する方法を検討する必要があります。監視期間を 10 分などに設定できます。10 分ごとに、ping コマンドを使用して、キュー リスニング プロセスがまだ実行されているかどうかを確認できます。プロセスが存在しない場合は、新しいキュー リスニングの再開を試みることができます。プロセス。
概要
この記事では、ThinkPHP6 でキュー監視を実装する方法を紹介し、キュー リスニング プロセスの管理をコマンドに統合するだけで、コマンド ラインまたはインターフェイスを使用できるようになります。タスク情報。キューの監視はアプリケーションの安定性とパフォーマンスを確保するために必要な方法であり、実際のアプリケーションでは、キューの効率と安定性を確保するために、特定のニーズに応じてキューを継続的に最適化および改善する必要があります。
以上がThinkPHP6 でキュー監視を実装するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。