В Laravel при запуске очередей Redis я не могу получить метод failed
, вызываемый в моем классе Job.Я хочу убедиться, что я могу правильно их регистрировать и что они записаны в таблицу failed_jobs.
Документация Laravel об очередях состояния
Вы можете определитьсбойный метод непосредственно в вашем классе заданий, позволяющий выполнять очистку по заданию при возникновении сбоя.Это идеальное место для отправки оповещения вашим пользователям или отмены любых действий, выполненных заданием. Исключение, вызвавшее сбой задания, будет передано методу сбоя :
Я не на 100% уверен, что Laravel считает "исключением, вызвавшим задание"терпеть неудачу".Ниже приведен очень простой класс работы.Все, что появляется в моих журналах, это It did not work
и exception caught
.
. Я запускаю эту очередь следующей командой, в частности, установив tries
в 1, чтобы она не пыталась повторно запуститьjob.
php artisan queue:work redis --queue=widgets --tries=1
Как получить вызов метода с ошибкой и отображение задания в таблице failed_jobs?
<?php
namespace App\Jobs;
use Exception;
use App\Processors\WidgetProcessor;
use Illuminate\Bus\Queueable;
use Illuminate\Support\Facades\Log;
use Illuminate\Support\Facades\Redis;
use Illuminate\Queue\SerializesModels;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
class WidgetJob implements ShouldQueue
{
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
public function __construct($widget)
{
$this->widget = $widget;
}
public function handle(WidgetProcessor $processor)
{
Redis::throttle('WidgetJob')->allow(5)->every(60)->then(function () use ($processor) {
try {
$var = false;
if($var == false) {
Log::notice('It did not work');
throw new Exception;
} else {
Log::notice('It worked');
}
} catch(Exception $e) {
Log::notice('Exception caught');
}
}, function () {
return $this->release(5);
});
}
public function failed(Exception $exception)
{
Log::notice('failed was called');
}
}