Как повторно выполнить тоже самое задание?
В задании если я сам вызываю throw, что бы прекратить его выполнение. Но мне надо добавить это же самое задание обратно в очередь. Метод release($daily = 0) не срабатывает в внутри метода failed( Exception $exception) класса Job, но срабатывает в провайдере
public function boot()
{
Queue::failing(function (JobFailed $event) {
if ($event->job->getQueue() == SendApiJob::QUEUE_NAME) {
// Если задача выполняется больше N раз
if($event->job->attempts() >= 3){
// Отправить пользователю уведомление о том что попытки отправить api провалились
logger()->alert('Превышен лимит повторных выполнений заданий в очереди ' . SendApiJob::QUEUE_NAME);
}else{
$event->job->release(10);
}
}
});
}
После того как она снова добавляется в задачи и начинает выполнение, Exception прилетает такой "MaxAttemptsExceededException" мол превышено максимальное кол-во попыток выполнить задачу. ($tries=999)
Как быть?
Метод throttle предложенный laravel тоже не добавляет задачу обратно в очередь
Redis::throttle('redis_queue_throttle')->allow(1)->every(5)->then(function () {
// code ...
throw new \Exception("AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA", 1);
}, function () {
// Could not obtain lock...
return $this->release(5);
});
Задача заключается в следующем: Нужно отправить http запрос, если он провалился то отправить его попозже. Соответственно с лимитом попыток.