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

队列

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

配置队列

  • 队列配置信息文件 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

文章地址分享:总结要点:使用队列,监控队列

本作品采用《CC 协议》,转载必须注明作者和本文链接
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
讨论数量: 4
sanders

因为一般我们会在模型监听器中分发队列任务,此时,会形成一个死循环

这句我没理解,有没有具体的 case 讲一下?

另外就是我比较关心楼主的 QUEUE_DRIVER 如何配置?如果是 redis 的话,遇到集群分片的情况是怎么处理的?

3周前 评论
Smilephp 3周前
Smilephp 3周前
sanders (作者) 3周前

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