我希望使用多个第三方 API 来收集用户搜索查询的信息。我计划为每个我想要访问的 API 分配一个线程,以最大程度地减少我的响应时间。由于内存/CPU 问题,我还想限制我的应用程序在任一时间可以运行的线程数量。
由于我使用 Laravel 作为框架,因此我尝试使用 Laravel 队列来完成此任务,但似乎我可能无法从作业获取响应数据。
- Laravel 队列是解决这个问题的正确方法吗?如果是这样我该怎么办 监听作业的状态并在作业完成后检索数据?我看到一些事情表明该工作即将结束,但有些事情就是不适合我。
最佳答案
这要看情况。如果需要进行大量 API 调用,尤其是当这些 API 调用可能非常慢时,作业队列和工作池可能是合适的。但是,我会尽量避免所有这些架构,除非您确实确定需要它。
首先,我会考虑向外部 API 发出异步请求,并尝试将整个过程保持在单个进程中。 Guzzle HTTP client library提供了一个非常程序员友好的 API 来执行此类异步请求。
如果外部请求确实很多或者很慢,你可以考虑使用队列。但在这种情况下,您需要实现一堆逻辑来对所有作业进行排队,然后轮询直到它们完成(一路上向用户提供反馈),最后返回合并的结果。这可能最终是必要的,但我将从上面描述的更简单的实现开始。
关于php - 我应该使用 Laravel 队列来管理应用程序中的线程吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40333545/