如何避免等待Laravel队列并继续使用功能

时间:2016-08-17 21:06:42

标签: laravel laravel-5.1

这可能是一个非常微不足道/新手的问题。我已经开始在我的一个控制器功能中使用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>'
    ]);
}

1 个答案:

答案 0 :(得分:7)

如果脚本确实在线处理作业,而不是离线处理,我最好的猜测是你正在为队列使用同步驱动程序,它会立即处理作业并阻塞。

检查config/queue.php文件以查看“默认”配置值的设置,默认情况下应该读取:env('QUEUE_DRIVER', 'sync')。如果是这样,那么这是正确的,那么请查看您的.env文件,并确保为QUEUE_DRIVER设置了环境变量。

如果QUEUE_DRIVER文件中的.env变量设置为“sync”,那么您正在使用同步驱动程序。如果它根本没有设置,那么queue.php文件中的那一行表示它将回退到同步驱动程序。

如果所有这些都成立,只需使用您想要使用的驱动程序更新环境变量,并确保在config/queue.php文件中更新该驱动程序的配置选项。

希望有所帮助!