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="Laravel\Horizon\HorizonServiceProvider"

启动执行任务监听

只需要一条命令语句即可启动队列执行进程。如果修改了任何代码需要重启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自动维护吧。

posted @ 2020-06-28 19:27  斯世轻尘  阅读(717)  评论(0编辑  收藏  举报