兴奋!第一次接触队列这个玩意儿,捋一下思路,附加两个问题

分享 Soldoros ⋅ 于 1个月前 ⋅ 最后回复由 xuanjiang1985 20小时前 ⋅ 724 阅读

为了避免一些耗时的操作增加响应请求的时间,所以使用队列。

队列的驱动:Redis

使用队列的方式有好几种,Redis 是其中一个。

在 Laravel 中使用 Redis 有两种方式,predis 是其中一个,需要安装扩展包:

composer require "predis/predis:~1.0"

然后在 .env 配置文件中将驱动方式改为 redis:

// 若值为 sync 为不使用队列

QUEUE_DRIVER=redis 

生成队列所需的表

执行队列任务的时候可能会失败,失败的任务相关信息会记录在这张表里,以方便再次执行。

使用命令创建迁移文件,执行迁移:

php artisan queue:failed-table

php artisan migrate

生成任务类

任务是队列存在的原因,任务里应该写那些需要耗时的操作。

生成任务类:

php artisan make:job ExampleJob

生成的类文件在 app/jobs 目录下,包含两个方法:

  • __construct() 用来初始化一些 handle() 方法需要用到的参数。
  • handle() 用来真正处理那些耗时的操作。

在这个方法中应该使用 DB 类直接对数据库进行操作,以避免如果有模型监听器的情况下,造成死循环的问题。

任务分发

任务分发就是把任务推送到队列中去等待执行。

在需要执行耗时操作的地方,使用 dispatch(new ExampleJob()) 推送到队列中。

队列监控

队列监控可以清楚地查看任务的状态等相关信息,Laravel 生态中的一员 Horizon 可以很好地完成这项任务(不明白这里取名 Horizon 有什么涵义,如果是翻译的话应该是表达什么意思呢?)。

安装:

composer require "laravel/horizon:~1.0"

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

启用监听和停止监听:

php artisan horizon

php artisan horizon:terminate

安装完成并启用监听后,路由 horizon 就可以访问了(查看了路由文件和控制器等没有发现添加这个路由,Laravel 真的好强好优雅,水平有限,现在怀疑是在某些深的层次里直接附带了这一块?)。

在测试的时候还发现这个页面还是热加载的,太贴心了。

在更新了逻辑代码以后最好重启一下监听进程。(因为我特意测试了一下不重启也可以,但从评论里得知可能会造成某些问题。)

线上部署

Supervisor 是一个用 Python 开发的 Linux 下的进程管理器,它会在监测到监听的进程关闭后自动重启。

官网: http://supervisord.org/
Github: https://github.com/Supervisor/supervisor

用到了再学习吧。

本文章首发在 Laravel China 社区

勤学如春起之苗,不见其增,日有所长。

本帖已被设为精华帖!
本帖由系统于 4周前 自动加精
回复数量: 5
  • Summer MOD A Life-long learner.
    1个月前

    总结是个不错的习惯,不过别发到『问题』分类下,可以发到自己的博客文章里。

  • Soldoros
    1个月前

    @Summer 知道了,老大

  • xuanjiang1985 人生苦短,用脚本语言。
    1个月前

    php 没有异步非阻塞,确实不爽。比如发通知,写日志,调异步加快速度。golang 只需要go一下就好,加个超时回收协程。

  • Soldoros
    1个月前

    @xuanjiang1985 swoole 了解一下?

  • xuanjiang1985 人生苦短,用脚本语言。 1
    4周前

    @Soldoros swoole 总觉得用起来不爽

暂无评论~~
您需要登陆以后才能留下评论!

Composer 中国全量镜像

Top 100 扩展包

Lumen 中文文档

Laravel 速查表

Laravel 中文文档

Laravel 项目开发规范

Laravel 开发环境部署

Elasticsearch-PHP 中文文档

Lumen 中文文档

GraphQL PHP 中文文档

社区文档撰写指南

TDD 构建 Laravel 论坛笔记

PHP PSR 标准规范

PHP 设计模式全集

Dingo API 中文文档