请问队列 .env配置QUEUE_CONNECTION=sync会自动执行,改成redis就不会自动执行

请问队列 .env配置QUEUE_CONNECTION=sync会自动执行,改成redis就不会自动执行,需要运行命令行才会执行。这是为什么,求大佬解答下

《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
最佳答案

sync配置的是同步执行,是开发用的,方便找问题,和下面的一样。

file

1周前 评论
讨论数量: 5
快乐壮

sync 是同步模式,本质上是直接执行代码的

1周前 评论

sync配置的是同步执行,是开发用的,方便找问题,和下面的一样。

file

1周前 评论

@lengqy 好的,谢谢回答

1周前 评论

sync 模式下,触发队列时执行的代码片段:

    // Illuminate\Queue\SyncQueue
    public function push($job, $data = '', $queue = null)
    {
        ...
        try {
            ...
            // 看这里直接执行了任务
            $queueJob->fire();
            ...
        } catch (Throwable $e) {
            $this->handleException($queueJob, $e);
        }
        return 0;
    }

redis 模式下,触发队列时执行的代码片段:

    // Illuminate\Queue\RedisQueue
    public function push($job, $data = '', $queue = null)
    {
        // 这里将任务放入了队列,并没有执行,命令行中执行命令后,会开启消费队列的进程,在那个进程里才执行代码
        return $this->enqueueUsing(
            $job,
            $this->createPayload($job, $this->getQueue($queue), $data),
            $queue,
            null,
            function ($payload, $queue) {
                return $this->pushRaw($payload, $queue);
            }
        );
    }
1周前 评论

异步模式需要用supervisor守护进程

1周前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!