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

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

《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
最佳答案

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

file

2年前 评论
讨论数量: 5
快乐壮

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

2年前 评论

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

file

2年前 评论

@lengqy 好的,谢谢回答

2年前 评论

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);
            }
        );
    }
2年前 评论

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

2年前 评论

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