Русское сообщество разработки на PHP-фреймворке Laravel.
Ты не вошёл. Вход тут.
Страницы 1
Всем доброго дня.
А вот такая заковыка:
Есть задание в очереди.
Работать может долго. Несколько десятков минут, условно можно считать, вплоть до часа.
Задирать время выполнения видится не очень хорошим решением.
Внутри джоба работает так, что есть возможность, отработав какую-то часть задачи, рестартануть.
Вопрос: а как внутри джобы рестартануть саму себя?
Не в сети
а если подробить на мелькие задачи\этапы?
вот основная задача выполнила какие-то манипуляции и наплодила следующие задачи, те в свою очередь выполнили свой этап обработки и создают новую задачу для следующего этапа
простой пример:
1я задача получила список сотрудников кому надо выплатить зарплату и создала для каждого свою задачу "выдача зарплаты сотруднику №1..№2...".
задача зарплаты начислила деньги сотруднику и создала задачу "оплатить налоги" и возможно задачу "внести в отчёт"
и т.д.
Изменено Eskono (06.09.2021 14:55:33)
Не в сети
Предложение разбить логику не катит.
В терминах вашего предложения, уже всё посчитано, мне в задаче нужно просто перечислить условному мильёну сотрудников известную сумму.
Решение нашлось.
Могло бы найтись быстрее, если бы не странный нейминг искомого метода.
https://laravel.com/docs/8.x/queues#man … sing-a-job
Не в сети
а почему бы не нарезать 1000 задач с пачкой по 1000 сотрудников? тогда не надо будет костыли с рестартом джобы городить. И если отвалится с ошибкой одна задача, то другие выполнятся, что не скажешь с уверенностью о рестарте джобы(до рестарта может и не дойти код)
Не в сети
А как нарезать по 1000?
Есть мильён записей рассчитанных выплат.
На то, что айди у них строго последовательные, естественно, не заложишься - параллельно может рассчитываться несколько таких батчей по мильёну, и перемешивать выплаты нескольких батчей в одном задании нельзя.
Не в сети
Страницы 1