Мне нужно добиться возможности отслеживать и иметь возможность отменять задание УЖЕ ЗАПУСК в очереди.
Существует множество ответов об удалении заданий QUEUED, но не об уже запущенных.
Это ситуация: у меня есть «задание», состоящее из сотен строк в базе данных, которые нужно запрашивать один-на-один у веб-службы.
Каждая строка должна бытьподнял, запросил у веб-службы, сохранил ответ и обновил его статус.
Я уже работал с командой (запуск из консоли / вывод на консоль), но теперь мне нужно реализовать очереди, чтобыПозволяет накапливать больше заданий от большего количества пользователей.
До сих пор я видел Horizon (который не работает в Windows из-за отсутствия библиотек управления процессами).Тем не менее, в некоторых демонстрационных версиях отсутствует (я считаю) пара вещей, которые мне нужны:
- Динамически настраиваемое время ожидания (вся работа может занять более 12 часов, в зависимости от количества обрабатываемых строкна выбранной работе)
- Возможность ОТМЕНИТЬ УЖЕ ЗАПУСК.
Я также рассмотрел вариант создания КАЖДОГО ЗАПРОСА как нового задания вместо того, чтобы рассматривать «задание» как целую коллекцию строк (это могло бы преодолеть время ожидания), но это дало бы мнеHorizon - список «ожидающих заданий» сотен тысяч записей на одно задание, и это может убить браузер (я знаю, что Redis может справиться с этим без всякого зуда).Кроме того, я думаю, что невозможно отменить «все задания, принадлежащие тегу X».
Я думал о переходе по маршруту API, запускаю работу и отсоединяю ее от приложения, но я вижучто это требует разветвления процессов.
Для возможности отмены я бы реализовал базу данных с помощью job_id, а когда пользователь нажимает API для отмены задания, я отмечал бы его как «остановленный».В каждом цикле я проверял бы его состояние, и если он обнаружил, что он «остановлен», то убивал себя.
Если я пропустил какой-либо аспект, просто кричите, и я добавлю его или уточню об этом.
Поэтому я прошу совета здесь, так как я новичок в Laravel: как я могу этого достичь?