Laravel Jobについて
Jobクラスについて
LaravelのJobクラスは、キューバックグラウンドで実行するためのタスクやロジックをカプセル化するためのものです。キューを使用すると、時間がかかるタスクを即座に処理する代わりに、後で実行するために「キュー」に入れることができ、ユーザーエクスペリエンスを向上させることができます。
以下はLaravelのJobクラスに関連する主要な要点です。
-
作成:
php artisan make:job JobName
コマンドを使用してJobクラスを作成することができます。 -
クラス構造: Jobクラスは主に
handle
メソッドを持ち、このメソッド内でキューで実行したいロジックやタスクを定義します。 -
ディスパッチ: Jobをキューに追加するには、
dispatch
メソッドを使用します。例:SomeJob::dispatch($data);
-
コンストラクタ注入: Jobクラスのコンストラクタにデータを注入することで、Jobの実行時にそのデータを使用することができます。
-
遅延:
delay
メソッドを使用して、ジョブを特定の時間後に実行するようにスケジュールすることができます。例:SomeJob::dispatch($data)->delay(now()->addMinutes(10));
-
最大試行回数 & タイムアウト:
tries
プロパティとtimeout
プロパティを使用して、ジョブが失敗した場合の最大試行回数と各試行の最大実行時間を定義することができます。 -
失敗ジョブの処理: ジョブが指定された回数以上失敗すると、
failed
メソッドが呼び出され、ここで失敗に関するロジックを定義することができます。 -
キュードライバー: Laravelは様々なキュードライバー(例: database, redis, sqs, etc.)をサポートしており、
.env
ファイルで設定することができます。 -
キューワーカーの実行:
php artisan queue:work
コマンドを使用してキューワーカーを起動し、ジョブを処理します。
LaravelのキューシステムとJobクラスを使用することで、アプリケーションのスケーラビリティとパフォーマンスを向上させることができます。
Jobのタイムアウト
多くの場合、キューに入れられたジョブにかかる時間は大体わかっているものです。このため、Laravelでは「タイムアウト」値を指定することができます。デフォルトでは、タイムアウト値は60秒です。ジョブがタイムアウト値で指定された秒数を超えて処理されている場合、ジョブを処理するワーカーはエラーで終了します。通常、ワーカーはサーバに設定されたプロセスマネージャによって自動的に再起動されます。
ジョブが実行できる最大秒数は、Artisanコマンドラインの-timeoutスイッチを使用して指定できます:
- デフォルトのタイムアウト時間は60秒に設定されている
- ジョブの実行時間がタイムアウト時間を超えた場合はエラーとなる
- ジョブが実行できる最大秒数をジョブクラス自身で定義することもできる
- タイムアウトがジョブ上で指定された場合、コマンドラインで指定されたタイムアウトよりも優先される