我创建了一个 Laravel 应用程序,其主要功能是从另一个 API 获取数据,向 Laravel 应用程序数据库表提供数据,到目前为止,我通过在控制器内编写方法并在 cron 命令中安排它们来实现这一点,例如
0 */1 * * * curl https://{app_url}/projects > /dev/null 2>&1
因此有一个名为
ProjectController
的控制器,其中有一个名为 fetch_data
的方法,我可以在其中向外部 API 发出 HTTP 请求。
如何在不需要运行 Linux cron 作业的情况下做到这一点?
我尝试使用 Laravel Jobs,但因为我提供的表大约有 30 个,每个表超过 50k 行,所以需要很长时间才能完成。除了作业和对控制器方法的 Http 请求之外,还有其他选择吗?
工人排队系统: Laravel 提供了强大的队列系统,可以帮助您将耗时的任务卸载给后台工作人员。您可以将作业分派到队列,然后让工作线程异步处理该作业,而不是直接在控制器或作业中运行数据获取逻辑。这可以帮助提高应用程序的性能和响应能力。
定义一个新作业用于从外部 API 获取数据。 当您的代码需要时分派此作业。 设置一个工作人员在后台处理作业。 这样,您的应用程序就可以继续响应传入请求,而无需等待数据获取任务完成。
其实可以通过任务调度来实现。您必须定义计划任务并在服务器中仅设置单个 cron。
更多参考: https://laravel.com/docs/10.x/scheduling#main-content & https://laravel.com/docs/10.x/scheduling#running-the-scheduler