LaravelのQueueの使い方

2020年3月25日水曜日

Laravel Queue

t f B! P L

LaravelのQueueを利用する機会があったので、備忘録として残す。

Queueのdatabaseを使用した。

1. .envを変更する

[.env]
 QUEUE_CONNECTION=database

2. config/queue.phpを変更する

[config/queue.php]
 'database' => [
    'driver' => 'database',
    'table' => 'jobs',
    'queue' => 'database',
    'retry_after' => 90,
  ],

  ...省略...

  'failed' => [
    'database' => env('DB_CONNECTION', 'mysql'),
    'table' => 'failed_jobs',
  ],

3. jobsテーブルとfailed_jobsテーブルを生成

 $ php artisan queue:table
 $ php artisan queue:failed-table
 $ php artisan migrate

4. ジョブクラスの作成

app/Jobsディレクトリに作成される

$ php artisan make:job {ジョブクラス名}

5. ジョブクラスの設定

class ジョブクラス名 implements ShouldQueue
{
    use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
    private $arg1;
    /**
     * 新しいジョブインスタンスの生成
     *
     */
    public function __construct($arg1) {
        // dispatchで指定された引数を受け取れる
        $this->arg1 = $arg1;
    }
    /**
     * ジョブの実行
     *
     * @return void
     */
    public function handle()
    {
        // 実行したい処理
    }

    /**
     * 失敗したジョブの処理
     *
     * @param \Exception $exception
     * @return void
     */
    public function failed(\Exception $exception)
    {
        // 失敗時の処理
    }
}

6. コントローラからジョブ登録する設定

public function xxxxxx()
{
    ジョブクラス名::dispatch(
        $arg1
    )
    ->onConnection('database')
    ->onQueue('database');
}

7. ジョブワーカーの起動

$ php artisan queue:work --queue=database

これでワーカーが起動されます。
起動した状態で、dispatchしたルートにアクセスするとjobsテーブルにジョブ登録され、非同期にジョブが実行されるはずです。

注目の投稿

composer.lockはGit管理すべき話

# 背景 # 結論 # composer installとcomposer updateの違い # 背景 仕事では主にLaravelを使用して開発を行っている。 ソースコードはGitでバージョン管理を行い、compose...

プロフィール

7年ほど中小企業でSIerとして働いていました。 現在は個人事業主としてPHP, Javascriptの企業案件をメインに受けています。 最近はポケモンカードの開封にはまっています。

アーカイブ

このブログを検索

QooQ