美文网首页
Laravel5.8 队列的使用与监控

Laravel5.8 队列的使用与监控

作者: 3132 | 来源:发表于2019-08-09 18:03 被阅读0次

队列

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` 主进程,则需要通过进程工具来重启。

相关文章

  • Laravel5.8 队列的使用与监控

    队列 Laravel5 使用队列可以异步执行消耗时间的任务,降低请求的响应时间 安装队列驱动 根据你自己的需求安装...

  • laravel使用队列监控 Horizon

    继 laravel使用队列 ,本篇介绍更好的队列监控工具--Horizon Horizon 是 Laravel 生...

  • centos7 laravel配置supervisor 及遇到错

    背景:公司系统部署,PHP laravel队列 使用Supervisor 进程监控管理系统 Supervisor ...

  • celery任务

    队列监控地址 若新增队列 在其他队列中增加任务

  • rabbitmq的队列消息累积监控总结

    目标:对rabbitmq的队列进行消息累积监控。整体思路: 根据rabbitmq提供的API,获取要监控的队列信息...

  • 系统监控

    监控主要对象: CPU CPU有几个重要的概念:上下文切换、运行队列和使用率。 这也是我们CPU监控的几个重点指标...

  • 消息队列(六)kafka监控的使用

    一:监控工具介绍 1.辅助问题定位:kafka的生产消费中可能出现的情况很多,涉及到message的bug,需要对...

  • rabbitMQ常用的命令

    启动监控管理器 关闭监控管理器 启动rabbitmq 关闭rabbitmq 查看所有的队列 清除所有的队列 用户和...

  • 播放器队列使用的优化

    播放音乐队列配合两个线程 一、 播放线程 : 不断循环取出播放队列取出下个歌曲就播放的 二、 监控线程 : 监控...

  • 忘记Django登陆账号和密码的处理方法

    公司部署了一套分布式网络监控系统,使用celery来做的分布式任务队列,针对celery的周期任务管理使用的是dj...

网友评论

      本文标题:Laravel5.8 队列的使用与监控

      本文链接:https://www.haomeiwen.com/subject/esxkjctx.html