ホームページ > 記事 > PHPフレームワーク > Laravel 開発: Laravel キューとスーパーバイザーを使用して非同期タスクを管理するにはどうすればよいですか?
Laravel 開発: Laravel キューとスーパーバイザーを使用して非同期タスクを管理する方法は?
最新の Web アプリケーションでは、非同期タスクが日常業務に不可欠な部分になっています。非同期タスクにより、アプリケーションの応答時間が短縮され、ユーザー エクスペリエンスが最適化され、アプリケーションのスケーラビリティが向上します。 Laravel Queues は、非同期タスクとメッセージ キューを処理するために Laravel フレームワークによって提供される強力なツールです。この記事では、Laravel キューの概念と使用法を紹介し、それを Supervisor と組み合わせて非同期タスクを管理します。
Laravel Queues は、非同期タスクとメッセージ キューを処理するためのメソッドです。 Laravel キューを使用すると、Web リクエストの応答時間に影響を与えることなく、時間のかかるタスクをキューに入れることができます。たとえば、電子メールの送信、ビデオの処理、PDF の生成などはすべて時間のかかる操作ですが、キューを使用してこれらの操作をバックグラウンド処理に置くことで、アプリケーションの効率と応答性を高めることができます。
Laravel Queues は、いくつかの組み込みキュードライバーを通じて、データベース、Redis、Beanstalkd、Amazon SQS などの複数のバックエンドテクノロジーをサポートします。これにより、開発者は好みのキューイング テクノロジを使用して非同期タスクを処理できるようになります。
以下では、Laravel キューを使用して非同期タスクを処理する方法を段階的に紹介します。
Laravel 構成ファイルには、キューとキュー ドライバーの構成に使用できる queue.php という名前のファイルがあります。次のコマンドを使用して queue.php ファイルを生成できます:
php artisan queue:table php artisan queue:failed-table php artisan migrate
これにより、移行ファイルとキュー テーブルが生成されます。移行コマンドを実行して移行を実行します。
queue.php ファイルでは、さまざまなキュー ドライバーの使用を選択できます。
たとえば、Redis キュー ドライバーを使用する場合は、queue.php ファイルを次のように構成してください:
'default' => env('QUEUE_CONNECTION', 'redis'), 'connections' => [ 'redis' => [ 'driver' => 'redis', 'connection' => 'default', 'queue' => env('REDIS_QUEUE', 'default'), 'retry_after' => 90, 'block_for' => null, ], ]
次に、非同期タスクを処理するキュー タスク クラスを作成する必要があります。このクラスは、タスクのロジックを定義する単純な PHP クラスである必要があります。たとえば、次のコードは電子メールを送信するための非同期タスク クラスです。
class SendEmail implements ShouldQueue { use Dispatchable, InteractsWithQueue, Queueable, SerializesModels; protected $email; /** * Create a new job instance. * * @return void */ public function __construct($email) { $this->email = $email; } /** * Execute the job. * * @return void */ public function handle() { Mail::to($this->email)->send(new WelcomeEmail()); } }
このクラスは、ShouldQueue インターフェイスを実装します。このクラスは、このクラスを非同期タスク クラスに変換するように Laravel に指示するために必要です。 handle() メソッドはタスクの特定のロジックを定義するため、非同期で処理する必要があるタスクをここで実行できます。
キュー タスクとキュー ドライバーの準備ができたので、次のステップはタスクをキューに入れることです。次のコードを使用して、プロジェクト内の任意の場所で Eloquent キューを呼び出します:
use AppJobsSendEmail; use IlluminateSupportFacadesQueue; ... Queue::push(new SendEmail('example@test.com'));
または、以下に示すように、dispatch() メソッドを使用してタスクをキューに入れることもできます:
SendEmail::dispatch('example@test.com');
タスクをキューに入れると、タスクはキューにディスパッチされ、実行を待ちます。次のコードを使用してキューを実行できます。
php artisan queue:work
このコマンドを実行すると、リスナーが開始され、キュー内のタスクが処理されます。
キュー タスクはバックグラウンドで実行する必要があるため、タスクが継続的に実行できるようにサーバー上にプロセス デーモンをセットアップする必要があります。スーパーバイザは、バックグラウンド プロセスが異常終了しないことを保証し、必要に応じて再起動する、一般的に使用されるプロセス デーモンです。
Ubuntu システムでは、次のコマンドを使用してスーパーバイザーをインストールできます:
sudo apt-get update sudo apt-get install supervisor
/etc/supervisor/conf.d ディレクトリに構成ファイル (myqueue.conf など) を作成します。
nano /etc/supervisor/conf.d/myqueue.conf
次の内容を構成ファイルに追加し、必ずパス、コマンド、ユーザー名を変更してください。使用しているプログラムに合わせてください:
[program:myqueue] process_name=%(program_name)s_%(process_num)02d command=/usr/bin/php /path/to/artisan queue:work --sleep=3 --tries=3 --daemon autostart=true autorestart=true user=username numprocs=1 redirect_stderr=true stdout_logfile=/path/to/storage/logs/myqueue.log
スーパーバイザの設定ファイルを変更した後、設定ファイルをリロードするようにスーパーバイザに通知する必要があります。次のコマンドを使用してスーパーバイザをリロードします。
sudo supervisorctl reread sudo supervisorctl update sudo supervisorctl start all
スーパーバイザのログ ファイルで、非同期タスクの出力とエラー情報を表示できます。たとえば、構成ファイルで指定されたパスとログ ファイル名を表示することで、スーパーバイザーのログを表示できます。
tail -f /path/to/storage/logs/myqueue.log
この記事では、Laravel キューとスーパーバイザーを使用して非同期を管理する方法を紹介します。 Laravel キューを使用すると、時間のかかるタスクを簡単にキューに入れることができ、アプリケーションの効率と応答性が向上します。スーパーバイザを使用すると、バックグラウンド タスクが継続的に実行され、必要に応じて自動的に再起動できるようになります。この記事があなたの成長に役立つことを願っています。
以上がLaravel 開発: Laravel キューとスーパーバイザーを使用して非同期タスクを管理するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。