@Synacs-U
Html, CSS, Js, Jquery, PHP, Mysql

Laravel, queue, database. Как повторно выполнить тоже самое задание?

Как повторно выполнить тоже самое задание?
В задании если я сам вызываю 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 запрос, если он провалился то отправить его попозже. Соответственно с лимитом попыток.
  • Вопрос задан
  • 239 просмотров
Решения вопроса 1
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы