总结要点:使用队列,监控队列

队列

使用队列可以异步执行消耗时间的任务,降低请求响应时间

配置队列

  • 队列配置信息文件 config/queue.php
    • 其中包含了所支持的队列驱动
  • .env 中修改所配置的队列驱动 QUEUE_DRIVER
  • 配置失败任务的记录
    • 创建数据库表 php artisan queue:failed-table

生成任务类

  • 创建任务类
    • php artisan make:job QueueJob
    • 生成的文件位于 app/Jobs
  • 配置任务类
    • _construct 构建方法中,注入所需要的模型
    • handler 方法中,开始你的任务

若任务涉及到了数据库的读写,需要注意
数据库的读写直接使用 DB 类,而不是使用 ORM
因为一般我们会在模型监听器中分发队列任务,此时,会形成一个死循环
通过 ORM 写数据库,触发 ORM 监听器 -> 分发队列任务 -> 任务中使用了 ORM 写数据库 -> 通过 ORM 写数据库,触发 ORM 监听器 -> ....

分发任务

  • 在模型监听器中调用 dispatch(new QueueJob($aModel))

需要注意
当创建数据时启用了队列任务时,需要在 saved 监听方法中分发任务
若在 saving 中分发任务,任务运行时通过数据 ID 寻找数据时可能会出错,因为 saving 的时候,数据还没有写到数据库

队列监控

  • 使用 Laravel 自带的 php artisan queue:listen
    • 只有命令行界面的输出
  • 使用 Horizon
    • Horizon 是 Laravel 的一员,提供友好的界面监控

使用 Horizon

安装

composer require "laravel/horizon:~1.0"

配置

php artisan vendor:publish --provider="Laravel\Horizon\HorizonServiceProvider"

访问 Web 页面

http://project.test/horizon

启动监控

php artisan horizon
本帖已被设为精华帖!
本帖由系统于 5年前 自动加精
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
讨论数量: 5

我安装Horizon一直报错:Installation failed, reverting ./composer.json to its original content.
你有遇到这个问题嘛。

6年前 评论

@maxII 我之前也是这样。在安装之前运行以下命令:(使用国内资源镜像)
$ composer config -g repo.packagist composer https://packagist.phpcomposer.com

6年前 评论

为什么我的监控不生效啊? workload检测不到队列

4年前 评论
Ruma_z 4年前

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