Как получение событие после выполнения группы параллельных заданий в Laravel Jobs?

Используется Laravel 6

Пример:
Получить товарные предложения от 10-ти поставщиков по API.
Каждый запрос - отдельная задача.
Необходимо запросы выполнить параллельно, а после выполнения всех запросов, обработать и отдать пользователю.

Проблема в получении события успешного завершения всех подзадач.
  • Вопрос задан
  • 235 просмотров
Пригласить эксперта
Ответы на вопрос 2
@ettychel
Банально и просто не выдумывая ничего!
Задача - получение 10 ответов
Подзадача - обработка 1 ответа

Отправляем запрос на товарные предложения - создали 10 строк в бд:

| id | task_id | provider_id | response |

Отправляем запросы с уникальными id, их же ждём в ответ + сам ответ
При получении ответа пишем его в бд, в поле response.
Проверяем поле response на NULL, если есть то ничего не делаем, если нету, то надо отправлять пользователю.
Ответ написан
Alex_Wells
@Alex_Wells
PHP/Kotlin
1) вариант с асинками

Простейший - https://amphp.org/artax/
Чуть больше контроля - https://amphp.org/parallel-functions/
Еще чуть больше контроля - https://github.com/amphp/parallel

Нюанс в том, что это не самая простая штука в плане дебага и поддержка у нее так себе. Да, она работает, да, она покрыта тестами, да, она поддерживается, но любая нестандартная херня и самостоятельно ничего фиксануть вы не сможете.

2) вариант с подготовкой данных до юзерского реквеста - если это возможно
3) говно-вариант - ваше решение. Загнать в базу/редис и там считать сколько осталось, дергая статус каждые 500мс.

Не совсем понял в чем там проблема с окончанием воркеров - засуньте все в job chain, либо лочьте по нужным ключам redis::funnel'ом, либо лочьте базой. Не совсем ясно, какая конкретно стоит задача, вместе со всеми ее нюансами.
Ответ написан
Ваш ответ на вопрос

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

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