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

How to avoid waiting for the Laravel queue and continue with functionality

这可能是一个非常 trivial/novice 的问题。我已经开始在我的控制器功能之一中使用 Laravel 队列;但是,当我分派作业时,我必须等待队列完成才能让我继续执行该功能。我认为队列背后的整个概念是它可以让你在后台处理时间密集型任务,这样你就可以继续使用其余的功能。

这是我的控制器的样子:

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>'
    ]);
}

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

检查 config/queue.php 文件以查看 "default" 配置值设置的内容,默认情况下应为:env('QUEUE_DRIVER', 'sync')。如果是这样的话,那是正确的,那么请查看您的 .env 文件并确保为 QUEUE_DRIVER.

设置了环境变量

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

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

希望对您有所帮助!