ArsenBespalov
@ArsenBespalov
Сам себе разработчик

Как не добавлять повторяющиеся задания в очередь в Laravel?

Не могу найти решение чтобы не добавлялись повторяющиеся задания в очередь. У клиента сейчас есть возможность выполнять задания из очередь только в 1 потоке, поэтому часто возникает ситуация когда добавляется важное задание, а там перед важным заданием висят другие задачи, которые по своей сути одинаковые, т.е. если они выполняют пересчет общей аналитики.

Существует ли возможность понять то, что такое задание уже существует в системе и не добавлять его, чтобы не плодились очереди одинаковых, мешая выполняться более важным задачам из той же очереди?

О софте:
Laravel 5.6
PHP 7.1
MySQL 5.7
Очередь в БД
  • Вопрос задан
  • 577 просмотров
Пригласить эксперта
Ответы на вопрос 3
@Morningstar_T
Закинуть в базу, затем при добавлений задания сравнивать на дубликат.
Ответ написан
Комментировать
Записал для вас ответ в видео формате, надеюсь доходчиво

  • Сделать ключ в базе приоритет
  • Уникальный ключ типа задачи
  • Добавить поле completed_at
Ответ написан
Комментировать
@goodman0907
Можно сделать как подсказывают авторы предыдущих ответов, но если понадобится сменить тип подключения, то такое решение работать не будет.
Можно обернуть добавление в очередь в команду и запускать через планировщик. У него есть специальный метод, который позволяет проверить была ли завершена предыдущая (та же самая) команда перед тем запустить её снова.
Вроде withoutOverlapping.

Ещё вариант.
Для задач с разным приоритетами создать разные очереди. И в нужной последовательности передать их обработчику.
php artisan queue:work --queue=high,low

Нужно смотреть в каждом случае что лучше подходит.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы