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

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

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

Проблема в получении события успешного завершения всех подзадач.
  • Вопрос задан
  • 228 просмотров
Пригласить эксперта
Ответы на вопрос 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'ом, либо лочьте базой. Не совсем ясно, какая конкретно стоит задача, вместе со всеми ее нюансами.
Ответ написан
Ваш ответ на вопрос

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

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