Laravel キュー 調べてみた
キューとは
非同期処理を実現するための仕組みです。
キュー周りには抑えておきたい用語が3つほどあるので、まずはそれらを抑えましょう。
①キュー
キューとは、ジョブを保存している部分になります。
イメージとしては、ジョブが入ってる箱のようなイメージです。
②ジョブ
ジョブとは、実行される処理1つ1つのことを指します。
ジョブはキューに保存され、保存された順に実行されていきます。
イメージとしては、キュー(箱)の中に入っているアイテム1つ1つのイメージです。
③ワーカー
ジョブを実行する部分になります。
Laravelにおけるキューの利用
Laravelにおいてキューの利用は以下の流れで実装できます。
なお、今回はドライバにLaravelが標準で装備されているRDBMSを使用します。
①キューの設定ファイルの変更
②キュー用のテーブルを作成
③ジョブの作成
④キューの設定
⑤ワーカーを使ったジョブの実行
順を追って紹介していきます。
①キューの設定ファイルの変更
デフォルトではキューの設定は、config/queue.phpにsyncで設定されています。
config/queue.php
'default' => env('QUEUE_CONNECTION', 'sync'),
RDBMSに変更する場合は、以下のように変更します。
'default' => env('QUEUE_CONNECTION', 'database'),
②キュー用のテーブルを作成
migrationでキューを保存するテーブルを作成します。
そのためのテーブルを作成するのですが、Laravel標準のコマンドが用意されています。
php artisan queue:table
このコマンドでDatabase/migrations配下にCreateJobsTableクラスが実装されたファイルが作成されます。
このクラスには、すでにカラムなどが実装されているのでこのままmigrateします。
php artisan migrate
③ジョブの作成
ジョブの実装を設定するファイルを以下コマンドで作成します。
php artisan make:job ファイル名
Jobs配下にファイルが作成されます。
以下作成されたファイル例になります。
<?php
namespace App\Jobs;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldBeUnique;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Queue\SerializesModels;
class SendMailAfterPost implements ShouldQueue
{
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
public function __construct()
{
//
}
public function handle() ・・・①
{
//
}
}
①handleメソッドに処理を書いています。
④キューの設定
キューをビジネスロジック内に設定していきます。
キューの設定にはdispatchメソッドが利用できます。
以下例になります。
use App\Jobs\SendMailAfterPost;
・
・
・
SendMailAfterPost::dispatch(引数);
作成したJobのクラスファイルをインポートしてdiapatch関数でキューの設定をします。
⑤ワーカーを使ったジョブの実行
ワーカーを使用したジョブの実行には以下コマンドを実行します。
php artisan queue:work
以下コマンドを実行するとキューに保存されているジョブが実行されていきます。
しかし、ワーカーが実行されるのはコマンドが効いている間だけです。
コマンドを停止してしまうと、ワーカーも止まってしまいます。
これでは、商用環境では使えません。
そこで、UNIX環境などで利用できるSuporvisorを使うことで解決します。
Suporvisorについては改めてまとめていきたいと思います。
以上!!!!!!!