0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

【勉強メモ】Laravelのqueueとjobについて

Posted at

実務でqueueとjobについて理解がたりなくて、仕事に時間がかかったため記録としてまとめてました。
間違いがあればご指摘いただけますと幸いです。

queue(キュー)とjob(ジョブ)とは

非同期処理を行う仕組み
実務でよく見るのは、メール送信やcsv解析など時間がかかる処理はjobクラスで行う印象が強い
※私が実務で読んだコードもcsv解析で使用されていました

基本的なキューの設定について

キューの設定は以下の2つのファイルで行われる
.env
config/queue.php

ちなみにconfig/queue.phpにはデフォルトでsyncと設定されています。
これはsynchronizeという同期という意味です。つまり同期処理なので、テストや開発環境で使われ本番環境では使われません。

sync以外には、database, veanstalkd, sqs , redisがあります。

実務で使ったdatabaseでジョブを管理する方法について

ジョブをdatabaseに保存するということをまとめます。

①.envに以下の設定

QUEUE_CONNECTION = database

②config/queue.php

defaultにdatabaseを設定する

③jobのテーブルを追加

php artisan queue:table
php artisan migrate

④ジョブの作成

php artisan make:job SendPDFMail

⑤jobファイルの処理を記述。jobファイルを発火させる処理を書く

省きます。

⑥ワーカを実行する

キューの中にあるジョブは自動で実行されるわけではなく、別のプロセスであるWorker(ワーカ)が必要となる

php artisan queue:work

キューワーカの実行について

queue:workは手動で閉じるか、ターミナルを閉じるまで処理が続くようになる
上記コマンドはqueue:workコマンド中にコードを変更しても気づかないようになっている
そのため再起動が必要となる。

更新されたコードをリロードする必要も、アプリケーションの状態をリセットしたりするときも再起動する必要がない。ただし、queue:workコマンドよりも大幅に効率が低くなります。

php artisan queue:listen

本番環境でもqueue:workを再起動やらをやらないといけないの?

本番環境では、queue:workプロセスを実行し続ける手段が必要。
queue:workプロセスが終了したことを検出し、自動的に再起動できるプロセスモニタである、Supervisorを設定することができます。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?