运行 来自控制器异步的命令

Running commands from Controller async

有迁移任务。用户上传文件到服务器,然后它应该被保存并且迁移命令应该是 运行 async。第一条路径运行良好,第二部分存在问题。 我试图将所有代码放入控制台命令并 运行 它与

Artisan::call('user:migrate', ['user_id' => $userId]);

Artisan::queue('user:migrate', ['user_id' => $userId]);

脚本有效,但异步无效,控制器的功能等待结束。 我还尝试创建一个 Job 并通过以下方式调用它:

$this->dispatch(new UserMigration($user));

结果相同,脚本有效但不异步。请帮助了解队列是如何工作的,这种方法更适合我的任务。 我没有创建任何队列迁移和配置,因为只需要异步调用这一步。

为了 运行 异步任务,Laravel 中的总体思路是将作业推送到队列(例如数据库 table)并让后台进程接收它们.

有关直接来自源的信息,请参阅 https://laravel.com/docs/8.x/queues

您可以使用以下方式启动队列工作程序:

php artisan queue:work

请注意,这是一个持续进行的过程,除非得到通知,否则不会停止。这意味着您对代码所做的任何更改只会在您重新启动该队列工作程序后反映出来。因此,在部署代码时 运行 php artisan queue:restart(或终止并启动 运行ning 任务)很重要。

所以现在您的队列工作人员 运行ning,您可以将要发送的电子邮件排队(例如在注册时),您的控制器将立即响应,而不必等待电子邮件发送已发送。

大多数(如果不是全部)信息都可以在上面的 link 中找到。如果您要执行大量后台任务,请查看 Laravel Horizon