Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Laravel 5 从控制器异步运行命令_Laravel 5_Laravel Queue - Fatal编程技术网

Laravel 5 从控制器异步运行命令

Laravel 5 从控制器异步运行命令,laravel-5,laravel-queue,Laravel 5,Laravel Queue,有一个迁移任务。用户将文件上传到服务器,然后应该保存该文件,并且迁移命令应该异步运行。第一条路径运行良好,第二部分存在问题。 我已经尝试将所有代码放到控制台命令中,并使用 Artisan::call('user:migrate', ['user_id' => $userId]); 或 脚本工作,但不异步,控制器的函数等待结束。 我还尝试创建一个作业,并通过以下方式调用它: $this->dispatch(new UserMigration($user)); 同样的结果是,脚本可以

有一个迁移任务。用户将文件上传到服务器,然后应该保存该文件,并且迁移命令应该异步运行。第一条路径运行良好,第二部分存在问题。 我已经尝试将所有代码放到控制台命令中,并使用

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

脚本工作,但不异步,控制器的函数等待结束。 我还尝试创建一个作业,并通过以下方式调用它:

$this->dispatch(new UserMigration($user));
同样的结果是,脚本可以工作,但不是异步的。请帮助了解队列是如何工作的,这种方法更适合我的任务。
我没有创建任何队列迁移和配置,因为我只需要异步调用这个步骤。

为了异步运行任务,Laravel中的一般思想是将作业推送到队列(例如数据库表)并让后台进程拾取它们

有关直接来自源的信息,请参阅

您可以使用以下命令启动队列工作程序:

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

因此,现在您的队列工作程序正在运行,例如,您可以将要发送的电子邮件排队(如注册时),您的控制器将立即响应,而不必等待电子邮件发送


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

异步
部分指的是使用
php artisan queue:work
运行的进程。它基本上是一个永恒的后台进程,它会拾取您推送到队列中的任何任务。因此,您的控制器应该只将其发送到队列,而不是实际执行它。好的,我必须迁移队列表,配置队列工作并运行它。在那之后,把作业发送到队列中,它就会工作,我明白你的意思了吗?是的,听起来不错。还要注意,queue:work是一个动态的过程,因此如果您对代码进行了更改,您需要重新启动该过程。有关更多信息,请参见OK,thx,您可以将其添加到答案中,我将接受it@Flame,还有一个问题,现在有许多控制台命令已经注册到Kernel.php。据我所知,跑步同步。在所有更改之后,它们是否也被异步处理,还是尽早保留?
php artisan queue:work