Laravel における Queue の利用 後編 – 失敗したタスクの管理

Queue は Laravel 上で非同期な処理を実行するための行列システムです。中編では、非同期キューのオプションについて解説しました。後編では、ジョブ処理時の例外処理について紹介してきます。

ジョブの例外処理

ジョブが例外を吐いてエラーとなった場合、ジョブは失敗し直ちにリトライされます。

ワーカーに、--tries オプションを付与することで Job が失敗した際に行うリトライの回数に制限を設けることができます。

$ php artisan queue:work --tries=3

ジョブが失敗した際には、failedという形でジョブの失敗がワーカーの出力に表示されます。ジョブにはfailed メソドを定義して、規定回数失敗した際の処理を指定することができます。

<?php

class ProcessPodcast implements ShouldQueue
{
    ....

    public function failed(Exception $exception)
    {
        ...
    }
}

失敗したジョブの管理

最終的にfailed 扱いとなったジョブを、Databaseに格納して管理することも可能です。

失敗ジョブ格納用の テーブルは 以下のコマンドで作成することができます。

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

失敗したジョブの一覧を確認する際には、以下のコマンドで行う事ができます。

$ php artisan queue:failed
+----+------------+-------+---------------------+---------------------+
| ID | Connection | Queue | Class               | Failed At           |
+----+------------+-------+---------------------+---------------------+
| 2  | database   | rss   | App\Jobs\ProcessRSS | 2018-06-16 05:08:41 |
| 1  | database   | rss   | App\Jobs\ProcessRSS | 2018-06-16 05:08:16 |
+----+------------+-------+---------------------+---------------------+

ジョブのIDを利用して以下のように手動で再リトライをかけることも可能です。

$ php artisan queue:retry 5

全てのジョブを再リトライする際には ID の代わりに all キーワードを利用します。

$ php artisan queue:retry all

ジョブを failed テーブルから削除する場合には queue:forget コマンドが利用できます。

php artisan queue:forget 5

全てのジョブを削除する際には queue:flush を利用します。

php artisan queue:flush

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です