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

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

《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
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 然后就卡死了,不动

4年前 评论
leo

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

4年前 评论

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