zoukankan      html  css  js  c++  java
  • laravels安装horizon和Supervisor

    队列

    队列用于异步执行消耗时间多的工作,比如发送邮件等操作,好处是可以快速为客户响应结果,具体处理异步后台的操作。

    下面的操作使用高效的redis完成处理,所以需要安装相应的扩展包

    composer require "predis/predis:~1.0"
    

    处理失败任务

    有时你的队列任务会失败。Laravel包含了一个便捷的方式指定任务会被最大尝试的次数。在一个任务到达了它最大尝试次数之后,它会被放入failed_jobs表。要创建failed_jobs表你可以使用queue:failed-table命令:

    php artisan queue:failed-table
    php artisan migrate	
    

    创建任务

    php artisan make:job TestJob
    

    在生成的类中的handle方法设置任务具体的动作,下面是一个简单的示例。

    protected $user;
    
    public function __construction(User $user)
    {
     	$this->user = $user;
    }
    
    public function handle()
    {
    	sleep(6);
    	file_put_contents('a.php', var_export($this->user->toArray(), true));
         $this->onQueue('smsJob');//如果这里添加了队列名称,开启队列的时候需要指定,否则队列无法运行 php artisan queue:work --queue='smsJob'
    } 

    分发任务

    TestJob::dispatch(User::find(1));
    

    队列处理器

    队列处理器用于执行推送到队列中的任务

    php artisan queue:work
    

    要使queue:work在后台运行需要使用下面的Supervisor(生产环境必用)

    Laravel队列监控面板

    Horizon提供了一个漂亮的仪表盘,并且可以通过代码配置你的Laravel Redis队列,同时能够让你轻松地监控你的队列系统中诸任务吞吐量,运行时间和失败任务等关键指标

    安装

    composer require laravel/horizon
    php artisan vendor:publish --provider="LaravelHorizonHorizonServiceProvider"
    

    启动执行任务监听

    只需要一条命令语句即可启动队列执行进程。如果修改了任何代码需要重启horizon监听(需要在Homestead系统中执行)

    php artisan horizon
    

    可以通过路由/horizon以图形界面查看任何状态

    在这里插入图片描述

    Supervisor

    一、安装:

    依次执行 yum install python-setuptools、yum install easy_install supervisor 进行安装

    Supervisor是一个进程控制系统,用于让我们的队列在后台运行,并自动维护进行,如果挂了就自动重启。

    二、创建 /etc/supervisor/ 目录,并生成默认配置文件

    mkdir /etc/supervisor
    cd supervisor
    echo_supervisord_conf > supervisor.conf

    vim /etc/supervisord.conf 如果没有,才执行上面红色的代码

    修改配置文件

      创建 /etc/supervisor/conf.d 目录,添加配置文件 laravel-worker.conf 文件如下

    sudo vi /etc/supervisor/conf.d/laravel-worker.conf
    # 使用program 后的参数区分不同的应用
    #[program: larave-worker-queue]   # 队列应用
    # 运行的命令
    #command=php /www/project/artisan queue:work --queue='orderDone'
    # 脚本运行的用户身份
    #user=root
    #process_name=%(program_name)s_%(process_num)d
    # 应用目录
    #directory=/www/project
    # 日志目录
    #stdout_logfile=/var/log/supervisor/laravel-worker.log
    #redirect_stderr=true
    #numprocs=1
    
    [program: larave-worker-horizon]  # horizon 应用
    command=php /www/project/artisan horizon
    user=root
    autostart=true
    autorestart=true
    process_name=%(program_name)s_%(process_num)d
    #directory=/www/project
    stdout_logfile=/var/log/supervisor/laravel-worker.log
    redirect_stderr=true
    numprocs=1

    注意command与stdout_logfile配置根据环境自行更改

    在supervisor.conf最后一行修改成

    files = /etc/supervisor/conf.d/*.conf   【有的时候不行,可以直接把laravel-worker.conf内容复制到supervisor.conf里面 

    supervisord -c /etc/supervisord.conf 就是-c后面配置文件的最下面,这样就可以识别了

    查看 /var/log/supervisor/laravel-worker.log日志文件是否正确生成

    运行

    一次执行下面命令加载配置并运行Supervisor

    sudo supervisorctl reread
    sudo supervisorctl update
    sudo supervisorctl start laravel-worker:*

    如果报错,查看如下
    # supervisorctl status
    unix:///var/tmp/supervisor.sock refused connection
    
    # supervisord -c /etc/supervisord.conf
    Error: could not find config file /etc/supervisor/supervisord.conf
    For help, use /usr/bin/supervisord -h
    
    # whereis supervisord.conf
    supervisord: /usr/bin/supervisord /etc/supervisord.conf /etc/supervisord
    
    # supervisord -c /etc/supervisord.conf
    Unlinking stale socket /var/tmp/supervisor.sock
    
    # unlink /tmp/supervisor.sock
    unlink: cannot unlink `/tmp/supervisor.sock’: No such file or directory
    
    # unlink /var/tmp/supervisor.sock
    
    # supervisorctl status
    unix:///var/tmp/supervisor.sock no such file
    
    # supervisord -c /etc/supervisord.conf
    //启动
    sudo supervisord -c /etc/supervisor/supervisord.conf
    // 查看运行状态
    sudo supervisorctl status

    sudo supervisorctl restart all
     
     

    这样我们就不需要执行php artisan queue:work命令了,交给Supervisor自动维护吧。

  • 相关阅读:
    互联网人25岁毕业 拿一万块钱月薪 (转)
    在windows平台编译openAL Android 库
    lua简单包装
    libevent 简单学习
    cocos2dx中使用tolua++使lua调用c++函数
    《OpenGL超级宝典》编程环境配置
    快速排序、归并排序、堆排序三种算法性能比较
    二叉树的三种遍历的递归与非递归算法
    boost之bind
    boost之内存管理
  • 原文地址:https://www.cnblogs.com/xuxiang/p/13204618.html
Copyright © 2011-2022 走看看