【发布时间】:2018-12-08 16:00:35
【问题描述】:
我目前在 laravel 中有一个 Cron,它以块的形式获取数据并调用 API。
流程如下
1. Cron runs every 5 minutes
2. Takes 80 data in chunks
3. Loop it through and call an API for 80 times and takes the next 80 in the next cron cycle
这种方法太慢了,如果表中有 10000000 条记录,则需要多次处理。我之前使用了 1000 个块,它破坏了我的系统,说“打开的文件太多”异常,为此我将块从 1000 个减少到 80 个。
我知道这是我正在做的一个非常糟糕的设计。
我需要重新构建当前模型并构建可以并行处理的东西。至少 500-1000 并行数据处理。
我如何在 Laravel 中做到这一点。甚至可以通过 PHP 还是我必须查看 nodejs 之类的选项?如果可以使用队列,请帮助我。即使我使用队列,我也可以通过它进行并行处理吗?
更新
现在我尝试使用 Laravel 队列
后台运行的命令
php /Users/ajeesh/PhpstormProjects/untitled3/open-backend-v2/artisan queue:work database --tries=1 --timeout=56
我的工作被处理了 3 次。我不知道为什么。
有人可以在这里提出解决方案吗?
【问题讨论】:
-
调用一个 API 80 次?
-
你使用的是哪个版本的 laravel ?你能解释一下为什么每五分钟调用一次太多的 API 吗?
-
作业运行了 3 次,这是因为作业失败。失败的作业将(默认情况下)运行 3 次。您能否验证作业是否失败(通过查看 queue:work 的输出)?
标签: php laravel parallel-processing queue