PavelUstyugov
@PavelUstyugov
proger support

Как правильно огранизовать очереди и Job в Laravel в моем случае?

Есть такая задача - каждые 5 минут запускается команда кроном и в результате выполнения команды выполняются несолько JOB - каждая job обращается к api и получает порцию данных, которую она записывает в базу.

Конкретно - обращается по АПИ и получает количество порций, которых нужно считать. Каждая Job - это порция.

Как добиться того, чтобы если все Job порции еще не закончили свою работу, то чтоб команда, которая стартует через 5 минут подождала и не начала выполняться? Ведь команда должна получать из mysql базы id последней записи и от нее уже отталкиваться. А бывает такое, что 5 минут прошло, команда запускает новые порции JOB, которые считывают из Mysql ID последней записи и если предыдущая порция еще не успела записать всё в базу, то команда получает неверный IT и начинает свою работу именно с того места, а не с последнего ID

Более наглядно:

Запускается команда. Обращается к APi. выясняется, что там 10 контрагентов. На каждого контрагента создается по одной JOB. Каждая JOB начинает работу - создает запись в mysql и выставляет в поле статус "Begin". Когда она занесла контрагента и все его документы в базу, то меняет поле в таблице на "finished". Но если вклинивается еще одна команда со своей порцией задач, то они вытаскивают из базы последнюю запись, с которой должны приступить, но оказывается, что предыдущие задачи еще не всё добавили и добавляют очередных контрагентов а следующая порция обращается к api и повторно считывает то что уже было считано ранее 5 минут назад, но еще не обработано.
  • Вопрос задан
  • 89 просмотров
Пригласить эксперта
Ответы на вопрос 1
Alex_Wells
@Alex_Wells
PHP/TS/Kotlin developer
Ну либо вы в одном месте делите ВСЮ базу по N айдишок и запускаете дофига джобов (с указанием конкретных айдишек или range'а айдишек), либо запускаете следующую джобу после конца предыдущей, продумав механизм перезапуска этой "цепочки".
Ответ написан
Ваш ответ на вопрос

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

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