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、easy_install supervisor 进行安装

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

在supervisor.conf最后一行修改成

files = /etc/supervisor/conf.d/*.conf

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

mkdir /etc/supervisor
cd supervisor
echo_supervisord_conf > supervisor.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:listen --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

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
 

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

猜你喜欢

转载自www.cnblogs.com/xuxiang/p/13204618.html