Как обрабатывать невыполненные задания в уведомлениях, находящихся в очереди

При использовании уведомлений с очередями:

class MyNotification extends Notification implements ShouldQueue
{

    use Queueable;
}

Как мне справиться с неудачными заданиями? Если бы я отправил электронное письмо/уведомление через класс задания, я мог бы использовать неудачный метод:

public function failed(Exception $exception) {

  Log::debug('MyNotification failed');

}

Однако неудачный метод в уведомлении не работает


person Alex    schedule 25.09.2019    source источник
comment
Неудачный метод работает в уведомлениях...   -  person Salim Djerbouh    schedule 25.09.2019
comment
Значит, метод failed(), помещенный выше в класс MyNotification, должен работать? Это не регистрирует ошибку для меня. Есть ли какой-то другой класс, который мне нужно импортировать, чтобы запустить метод failed().   -  person Alex    schedule 26.09.2019


Ответы (2)


Вы должны проверить документацию Laravel здесь.

Например, в свой AppServiceProvider вы можете добавить:

public function boot()
{
    Queue::failing(function (JobFailed $event) {
        // $event->connectionName
        // $event->job
        // $event->exception
    });
}

Обработка невыполненного задания является обязанностью не уведомлений, а очередей.

person Aleksandar Milivojsa    schedule 25.09.2019
comment
Простое удаление ссылки не является ответом, предложите решение для OP на SO и даже при ссылке на документы скопируйте и вставьте часть, где OP найдет решение в случае, если веб-сайт выйдет из строя. - person Salim Djerbouh; 25.09.2019
comment
@CaddyDZ спасибо за комментарий, я отредактирую свой ответ, чтобы объяснить больше - person Aleksandar Milivojsa; 25.09.2019
comment
Разве это не справится со всеми неудачными заданиями? Я знаю, что могу фильтровать, но мне интересно, есть ли способ обрабатывать неудачные задания в классе уведомлений. - person Alex; 26.09.2019

Caddy DZ прав, есть метод handle() для уведомлений: https://github.com/illuminate/notifications/blob/master/SendQueuedNotifications.php#L92

Моя проблема заключалась не в импорте класса Exception, код должен быть:

public function failed(\Exception $exception) {

  Log::debug('MyNotification failed');

}
person Alex    schedule 26.09.2019