queue:listen 和 queue:work --daemon 的区别

请问 queue:listenqueue:work --daemon 在实际使用中需要如何取舍?

从文档介绍以及阅读代码,可以得出 queue:work --daemon 能够完成 queue:listen 的功能且性能更好,为什么 queue:listen 还有存在的必要?

本帖已被设为精华帖!
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
讨论数量: 6
Summer

三种情况:

  • queue:work 默认只执行一次队列请求, 当请求执行完成后就终止;
  • queue:listen 监听队列请求, 只要运行着, 就能一直接受请求, 除非手动终止;
  • queue:work --daemonlisten 一样, 只要运行着, 就能一直接受请求, 不一样的地方是在这个运行模式下, 当新的请求到来的时候, 不重新加载整个框架, 而是直接 fire 动作.

能看出来, queue:work --daemon 是最高级的, 一般推荐使用这个来处理队列监听.

注意: 使用 queue:work --daemon , 当更新代码的时候, 需要停止, 然后重新启动, 这样才能把修改的代码应用上.

至于存在的必要

  • 首先, --daemon 是在 Laravel 4.2 以后才加入的.
  • 其次, 从上面的分析来看, queue:listenqueue:work --daemon 还是有区别的.
9年前 评论
Summer

三种情况:

  • queue:work 默认只执行一次队列请求, 当请求执行完成后就终止;
  • queue:listen 监听队列请求, 只要运行着, 就能一直接受请求, 除非手动终止;
  • queue:work --daemonlisten 一样, 只要运行着, 就能一直接受请求, 不一样的地方是在这个运行模式下, 当新的请求到来的时候, 不重新加载整个框架, 而是直接 fire 动作.

能看出来, queue:work --daemon 是最高级的, 一般推荐使用这个来处理队列监听.

注意: 使用 queue:work --daemon , 当更新代码的时候, 需要停止, 然后重新启动, 这样才能把修改的代码应用上.

至于存在的必要

  • 首先, --daemon 是在 Laravel 4.2 以后才加入的.
  • 其次, 从上面的分析来看, queue:listenqueue:work --daemon 还是有区别的.
9年前 评论

@Summer 我用的 Laravel 5.3,似乎 queue:work 就会一直执行下去,只要有新的队列就执行

7年前 评论

@纸牌屋弗兰克 是的啊。5.3貌似work和listen差不多都是一直执行所有任务?目前还不清楚有什么区别。

6年前 评论
melodycoder

@纸牌屋弗兰克 --daemon Run the worker in daemon mode (Deprecated)

6年前 评论

listen 并发怎么支持,我在测试的时候发现,listen启动多个进程时,会对同一个任务执行多次,
有人遇到过吗,怎么解决的

4年前 评论

work 命令的适用场景是:

任务数量较多,
性能要求较高,
任务的执行时间较短,
消费者类中不存在死循环,sleep() ,exit() ,die() 等容易导致bug的逻辑

listen命令的适用场景是:
任务数量较少,
任务的执行时间较长(如生 成大型的excel报表等),
任务的执行时间需要有严格限制

1年前 评论

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