这可能是一个非常微不足道/新手的问题。我已经开始在我的一个控制器功能中使用Laravel Queue;但是,当我发送作业时,我必须等待队列完成才能继续使用该功能。我认为队列背后的整个概念是它允许您在后台处理时间密集型任务,因此您可以继续使用其余功能。
这就是我的控制器的样子:
public function postCreate(Request $request)
{
// Validate Request
$this->validate($request, $this->rules());
// I have to wait for this to finish before it lets me continue
// I want this to be processed in the background instead
$this->dispatchFrom('App\Jobs\GenerateReport', $request);
return json_encode([
'html' => '<p>some html</p>'
]);
}
答案 0 :(得分:7)
如果脚本确实在线处理作业,而不是离线处理,我最好的猜测是你正在为队列使用同步驱动程序,它会立即处理作业并阻塞。
检查config/queue.php
文件以查看“默认”配置值的设置,默认情况下应该读取:env('QUEUE_DRIVER', 'sync')
。如果是这样,那么这是正确的,那么请查看您的.env
文件,并确保为QUEUE_DRIVER
设置了环境变量。
如果QUEUE_DRIVER
文件中的.env
变量设置为“sync”,那么您正在使用同步驱动程序。如果它根本没有设置,那么queue.php
文件中的那一行表示它将回退到同步驱动程序。
如果所有这些都成立,只需使用您想要使用的驱动程序更新环境变量,并确保在config/queue.php
文件中更新该驱动程序的配置选项。
希望有所帮助!