1
1

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】ジョブ・キューとは/簡単な実装

Posted at

環境

・Laravel10
・Windows11

ドキュメント

ジョブ・キューとは

時間の掛かる処理を非同期で実行する機能。

リアルタイムでの実行が適さないタスクをジョブとして定義

キューに追加

実行

使用用途
例)
・メール送信
・バッチ処理
・遅延実行

データベースの準備

ジョブキュー実装のため、2つのテーブルをコマンドで生成。

jobsテーブル生成

php artisan queue:table

ジョブをキューに保持するためのテーブルがされる。
image.png

image.png
〇各カラムについて
queue
INSERTされるとき、ジョブが属するキューの名前が入る。通常はdefault
payload(キューとも呼ばれる)
ジョブの実行内容がJSON形式で入る。
attempts
エラー試行回数が入る。
reserved_at
ジョブが予約された日時が入る。
available_at
ジョブが処理可能になる日時が入る。

キューに追加されたジョブが以下のように保持される。
image.png

failed_jobsテーブル生成

php artisan queue:failed-table

失敗したジョブを保持するテーブルが生成される。
image.png

image.png
exception
エラーログに記述される内容が入る。

uuidとは

ソフトウェア上でオブジェクトを一意に識別するための識別子である。分散システム上での利用を考慮して設計されており、統制なしに作成しても重複や偶然の一致が事実上起こらないものとして使用できる
[引用:https://ja.wikipedia.org/wiki/UUID]

環境設定

.env

QUEUE_DRIVERdatabaseに変更。
image.png

config/queue.php

driverdatabasに変更。
image.png

ジョブのディスパッチ

dispatchメソッドを用いることで、ジョブをキューに追加できる。

SendEmailJob::dispatch($user);

バッジやコントローラー内などに記述。

ジョブの実行を遅延させる

例)~分後に実行

SendEmailJob::dispatch($user)->delay(now()->addMinutes(5));

ジョブクラスの生成

キューに登録するジョブはジョブクラスとして作成する。

php artisan make:job SendEmailJob

App\Job配下にファイルが生成される。
image.png
Illuminate\Contracts\Queue\ShouldQueueインターフェイス
非同期でジョブをキューに投入し、実行することを宣言。
handleメソッド
ジョブがキューで処理されるときに呼び出される。

キューに投入したジョブを実行

キューワーカーとは
キューに貯め込んだジョブを実行する。

以下のコマンドで、キューワーカーを起動し、キューに投入したジョブが実行される。

php artisan queue:work

※実行されたジョブはjobsテーブル内からなくなる。

参考記事

1
1
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
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?