2016-10-30 2 views
0

Я ищу, чтобы ударить несколько сторонних API-интерфейсов, чтобы собирать информацию для поискового запроса пользователя. Я планирую открутить поток для каждого API, который я хочу поразить, чтобы минимизировать время отклика на моем конце. Я также хочу ограничить количество потоков, которые мое приложение может запускать в любой момент из-за проблем с памятью/процессором.Должен ли я использовать Laravel Queues для управления потоками в моем приложении

Поскольку я использую Laravel в качестве моей структуры, я пытался выполнить это с помощью очередей Laravel, но, похоже, у меня могут возникнуть проблемы с получением данных ответа из Job.

  • Есть ли у laravel правильные способы решения этой проблемы? Если да, то каким образом прослушивает статус задания и извлекает данные после завершения задания? Я вижу некоторые вещи, которые указывают на прохождение закрытия работы, но что-то просто не нажимает на меня.

ответ

0

Это зависит. Очередь заданий и рабочий пул могут быть подходящими, если действительно существует огромное количество вызовов API, особенно если эти вызовы API могут быть очень медленными. Но я постараюсь избежать всей этой архитектуры, если вы не уверены, что вам это нужно.

Чтобы начать, я бы посмотрел на запросы async на внешние API и попытался сохранить все это в одном процессе. Guzzle HTTP client library предоставляет очень простой в программировании API для выполнения таких асинхронных запросов.

Если внешние запросы действительно многочисленны или медленны, вы можете рассмотреть возможность использования очереди. Но в этом случае вы смотрите на реализацию логики для очереди всех заданий, затем опроса, пока они не будут сделаны (давая обратную связь вашему пользователю по пути), и, наконец, верните объединенный результат. Это может оказаться необходимым, но я начну с более простой реализации, описанной выше.

+0

Большое спасибо за ответ! Я полностью упустил возможность выполнять асинхронные запросы через Guzzle. В настоящее время я использую guzzle, чтобы делать запросы, поэтому для меня это просто один дополнительный шаг, чтобы перейти на асинхронный. Я думаю, на данный момент я могу просто реализовать семафор или что-то подобное, чтобы ограничить количество запросов, которые могут выполняться одновременно, и полностью отказаться от очереди Laravel. – Rocky