どうもきよです!
今回はLaravelの非同期処理について簡単にメモしていきます。
開発していると、どうしても時間がかかってしまう処理ってありますよね。
同期処理で時間がかかってしまうと使用者の待ち時間が発生してしまうため、
あまりよくありません。
なので、そんなときは非同期処理を使ってみてもいいかもしれません。
簡単に使用できるので、ぜひお試しください。
(データベース用の手順です)
■参考サイト
Laravelで非同期実行する
Laravel公式サイト
1.テーブル作成
・Jobテーブルマイグレーション作成
php artisan queue:table
・Job失敗テーブルマイグレーション作成
php artisan queue:failed-table
・テーブルを作成
php artisan migrate
※実行していないマイグレーションがすべて実行されます。
2.envファイルの修正
・デフォルトでは「sync」になっているので、「database」に修正
QUEUE_DRIVER=database
3.Jobファイルを作成
・非同期で動かす処理を記述するファイル作成
php artisan make:job sampleJob
※「sampleJob」は作成したいファイル名です
※プロジェクト/app/Jobs/SampleJob.php が出来上がります
4.Jobの起動方法
・サーバーで下記を実行する
php artisan queue:work
※作成したjobsテーブルを監視してくれます。jobが登録されていると処理してくれます。
※起動したjobが成功すると、jobsテーブルのjob(レコード)を削除してくれます。
※起動したjobが失敗すると、failed_jobsテーブルにjob(レコード)を登録してくれます。
・バックグラウンド実行
nohup php artisan queue:work &
※公式では、「Supervisor」を使った方法が記載されておりますので、そちらもご確認ください。
5.Jobの登録方法
・コントローラーなど処理内で、下記を記述する。
use App\Jobs\SampleJob; class HogeController extends Controller { public function hoge(Request $request) { $string = 'hogehoge'; SampleJob::dispatch($string); } }
※::dispatch()のカッコ内は引数を渡します。
※dispatchをすることで、jobsテーブルにjobを登録できます。
6.失敗したJobの対応方法
・ID=2のジョブを再実行する場合
php artisan queue:retry 2
・失敗したジョブを全て再実行する場合
php artisan queue:retry all
・ID=2のジョブを削除する場合
php artisan queue:forget 2
・失敗したジョブをすべて削除する場合
php artisan queue:flush
以上、よろしくお願いいたします。