邮件发送使用了异步的 ShouldQueue,但是我并没有执行 PHP artisan queue:work 之类的操作,为什么仍会异步?

RT.
另:ShouldQueue 部分的原理是如何运行的?

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

事件是否异步和你有没有执行 queue:work 没有关系,只要在定义类的时候 implements ShouldQueue 那就是异步。

大致原理就是 Laravel 的会去判断 Notification 类是否是 ShouldQueue 子类,是的话就往队列里扔,否则就立即执行。

5年前 评论
讨论数量: 13
leo

事件是否异步和你有没有执行 queue:work 没有关系,只要在定义类的时候 implements ShouldQueue 那就是异步。

大致原理就是 Laravel 的会去判断 Notification 类是否是 ShouldQueue 子类,是的话就往队列里扔,否则就立即执行。

5年前 评论

@leo
队列的话不是应该有消费者线程吗?
我没有启动消费者线程,那入队后应该就没有后续发邮件操作了,但在例子中却正常发送了邮件,这看起来就像同步发送一样。困惑的地方就在这里

5年前 评论
leo

@Eangel 如果 .env 中的 QUEUE_DRIVER 如果是 sync 的话,那么 Laravel 会忽略掉 ShouldQueue 将其变为同步执行。

5年前 评论

@leo 你说的是 QUEUE_CONNECTION 吗?

5年前 评论
leo

@刘拯明 QUEUE_DRIVER

5年前 评论

@leo 好吧~ 我在 5.7的 env 中没有找到 QUEUE_DRIVER 项~ 应该是默认模板木有~

5年前 评论

@leo 那么本课中并没有讲到将 env 的 QUEUE_DRIVER 设置为 redis,则暂时还是同步的是吗

5年前 评论
leo

@xuelong 后面的章节会用到

5年前 评论

@leo 我设置 QUEUE_DRIVER=sync 能正常收发邮件,当然是同步的,注册返回比较慢;
设置 QUEUE_DRIVER=redis 之后,注册很快就成功,但是始终没有收到邮件;
我是设置的qq邮箱,在同步的情况能走完课程中流程。
请问异步的情况下为什么收不到邮件呢?

5年前 评论
leo

@laravel初探者 队列处理器启动了没有?

5年前 评论

@leo 没有启动,看本教程以为不需要的。翻看了文档才发现需要启动的

5年前 评论

@leo 队列处理器启动不了,但是测试程序,可以跑起来。同步之行的
php artisan queue:work 然后就卡死了,不动

5年前 评论
leo

@wells 队列处理是否改成了 redis?注意不同版本的 Laravel 的 .env 是不一样的,另外就是清除一下配置缓存 php artisan config:clear

5年前 评论

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