😇
Laravelのキュー処理失敗を検知したい
キュー処理の失敗に気づけない問題
Laravelのキューを使って非同期で処理していましたが、ある時failed_jobsテーブルに失敗したジョブが積まれていた。
アラートが発生した時はslackの専用チャンネルに通知されるようにしているけど、キュー処理が失敗しても通知されない。
検知する方法
公式ドキュメントを確認したところ、キューを処理するクラスにfailedメソッドを追加してあげればいいだけみたいです。
以下が公式ドキュメントに載っていた参考コード
公式ドキュメント.php
<?php
namespace App\Jobs;
use App\Models\Podcast;
use App\Services\AudioProcessor;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Queue\SerializesModels;
use Throwable;
class ProcessPodcast implements ShouldQueue
{
use InteractsWithQueue, Queueable, SerializesModels;
/**
* 新しいジョブインスタンスの生成
*/
public function __construct(
public Podcast $podcast,
) {}
/**
* ジョブの実行
*/
public function handle(AudioProcessor $processor): void
{
// アップロードされたポッドキャストを処理…
}
/**
* ジョブの失敗を処理
*/
public function failed(Throwable $exception): void
{
// ユーザーへ失敗を通知するなど…
}
}
なんて簡単なんだ、、、
実際に失敗した時にログ出力するようにしてみた所、確認することができました🎉
最後に
知っていればなんてことないけど、知らないとどうやってエラー通知を出せばいいんだってなりそうだなって感じました。
artisanコマンドで作成した時にfailedメソッドも生成されれば良くないかって思いました😇
Discussion