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については改めてまとめていきたいと思います。

 

以上!!!!!!!