ピックアップ

Laravelのqueueについてのデフォルト設定と基本についての個人的メモ。

Laravelで、

queueを使っていたが、

使い方のみ調べて、

設定して運用していたので、

改めて、

個人用に再確認して、

それを自分のために整理したメモ。

最新情報や、

情報の精査は、

公式サイトなどを正として、

必要に応じて、

そちらをご覧ください。

あくまで、

個人用のメモなので。

前提

Laravelで試していますが、

バージョンについては、

php artisan --version

で確認すると、

概ね、

10か11でした。

Queueとは?

キューについては、

目的としては、

  • 重い処理(メール送信・API 呼び出し等)を非同期化
  • パフォーマンス向上
  • さまざまなキューバックエンドを統一的に扱うため

という認識。

Laravel 8 以降は Job のバッチ処理などが強化された認識で、

自分もそれの少し後くらいから使い始めました。

Queueを動かすコマンドや関数

メインとして

php artisan queue:work

Job(処理内容)

こちらは、

実際に実行されるときに、

どのような処理するかを記載する。

処理の実装は、

  • クラスとして定義し、handle() に処理を書く
  • Job::dispatch() でキューに投入

を実装するので、

app/Jobs

などにまとめる。

Queue Driver(保存先)

Driverについては、

  • sync
  • Redis
  • Database
  • Amazon SQS

などが設定できますが、

デフォルトは、

config/queue.php

に設定があり、

'default' => env('QUEUE_CONNECTION', 'sync'),

であるので、

ここで設定変更できる。

Worker(実行役)

Workerに関しては、

  • キューから Job を取り出して順次実行
  • 成功→削除、失敗→リトライ or Failed Jobs

を行うもの。

これは、

php artisan queue:work

で動かす認識。

メモ

✔️ よくある誤解

「worker が実行する時にコンストラクタが再び呼ばれる?」
呼ばれません。

Job は シリアライズ → デシリアライズ されるので、
実行時に呼ばれるのは handle() だけ です。

シリアライズ(serialize)とは?

オブジェクトや配列などの「複雑なデータ」を、
ファイルやキューに保存できる「文字列データ」に変換すること。

逆に元に戻すことを デシリアライズ(unserialize) と言います。

⚙️ Laravel Queue でのシリアライズ

Laravel の Queue に Job を入れるとき、こうしています:

  1. dispatch() が Job のインスタンスを作る(コンストラクタが呼ばれる)
  2. Job のインスタンスをシリアライズ(=文字列データ化)する
  3. その文字列を Redis/SQS/DB に保存する
  4. Worker が文字列を取り出して
    • デシリアライズ(元の Job インスタンスに復元)
    • handle() を実行

重要ポイント

  • コンストラクタが呼ばれるのは dispatch 時だけ
  • Worker 側は デシリアライズで復元されるだけなので、
    コンストラクタは実行されない
  • 実際の処理は handle() に書く必要がある理由がこれ

🏁 まとめ(超シンプル)

  • シリアライズ=オブジェクトを文字列にする
  • デシリアライズ=文字列から元のオブジェクトに戻す
  • Laravel Queue は「Job をシリアライズしてキューに保存する」
  • Worker はそれをデシリアライズして handle() を実行する
  • コンストラクタは dispatch 時しか呼ばれない

ピックアップ

おすすめ書籍

コメント一覧

コメントはまだありません。

コメント送信

コメントを残す

広告

おすすめ記事