Laravel5.8 队列的使用与监控

队列

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

安装队列驱动

  • 根据你自己的需求安装对应的队列驱动
composer require "predis/predis:~1.1"

关于配置队列

  • 队列配置信息文件 config/queue.php
    其中包含所有支持的队列驱动
    
    .
    .
    'redis' => [
            'driver' => 'redis',// 队列驱动类型
            'connection' => 'default',
            // 默认队列名称 default,若有多个job最好命名互相不一致
            'queue' => env('REDIS_QUEUE', 'default'),
            // 如果retry_after 设定的值为 90, 任务在运行 90 秒后还未完成,那么将被释放回队列而不是删除掉。
            'retry_after' => 90,
            //  redis 节点
            'block_for' => null,
        ],
    .
    .
        # 队列执行失败配置参数
    'failed' => [
        # 队列保存失败 链接数据库默认mysql
        'database' => env('DB_CONNECTION', 'mysql'),
        # 队列保存失败 保存数据库表 failed_jobs 中
        'table' => 'failed_jobs',
    ],
  • .env 中修改所配置的驱动 QUEUE_CONNECTION 的值
QUEUE_CONNECTION=redis
  • 使用队列也会有失败,故需要配置失败任务的表

    php artisan queue:failed-table

生成任务类

  • 创建任务

    • 运行命令行 php artisan make:job QueueJob
    • 将会生成新文件置于 app/Jobs/QueueJob.php
  • 配置任务

    • app/Jobs/QueueJob.php
    • __construct 初始化方法注入对应模型
    请根据自己的模型名称自行替换 Model $model
    此模型名称对应下文的:某模型监听器(app/Observers/某模型监听器文件.php) 的 Model
    
    public function __construct(Model $model)
    {
        // 队列任务构造器中接收了 Eloquent 模型,将会只序列化模型的 ID
        $this->model = $model;
    }
    
    • handler 方法中执行任务所需 code
    public function handle()
    {
        // 执行code...
            
        /*
         * 此处注意点:
         * 
         *  若任务code 涉及到数据库的读写操作,需要将使用 ORM 模型对数据库的读写操作,使用 DB 类代替
         *
         *  若不使用 DB 类对数据库读写,将会陷入调用死循环
         *  因为一般会在 `模型监听器` 中分发队列任务
         *
         *    模型监控器(app/Observers/某模型监听器文件.php)分发任务(app/Jobs/Queue.php) ->
         *      任务(app/Jobs/Queue.php)触发模型监控器(app/Observers/某模型监听器文件.php) ->
         *          模型监控器再次分发任务 -> 
         *              任务再次触发模型监控器 ->...
         */
        
    }
    

分发任务

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

    某模型监听器(app/Observers/某模型监听器文件.php) 中

    注意点:
        当创建数据时启用了队列任务的时候,需要在 `saved` 监听方法中分发任务
        
    public function saved(Model $model)
    {
        // 推送任务到队列
        dispatch(new QueueJob($model));
    }    
    
    • 若在saving() 中分发任务,任务运行时通过数据ID 查找数据会出错,此时 saving() 还未将数据写入数据库

关于队列监控

  • 可使用 Laravel 自带的 php artisan queue:listen 监控队列任务

  • 或安装队列监控 Horizon,拥有友好界面监控

  • 安装 Horizon

    composer require "laravel/horizon:~1.0"
  • 发布相关文件
php artisan vendor:publish --provider="Laravel\Horizon\HorizonServiceProvider"
  • 访问 Horizon 控制台
http://yourProject.com/horizon
  • Horizon 是监控程序,需要常驻运行
    • artisan horizon 队列工作的守护进程是一个常驻进程.
    • 它不会在你的代码改变时进行重启,
      当修改代码以后,
      需要在命令行中对其进行重启操作。
php artisan horizon
  • artisan horizon 线上部署时需另行配置进程管理工具来监控
上面讲述到 `artisan horizon` 是不会再修改代码后自动重启。
当需要终止当前 `Horizon` 主进程,则需要通过进程工具来重启。
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,222评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,455评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,720评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,568评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,696评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,879评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,028评论 3 409
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,773评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,220评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,550评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,697评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,360评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,002评论 3 315
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,782评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,010评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,433评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,587评论 2 350

推荐阅读更多精彩内容