laravel使用消息队列

队列

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

下面的操作使用高效的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));
}

分发任务

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

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

修改配置文件
sudo vi /etc/supervisor/conf.d/laravel-worker.conf

内容如下

[program:laravel-worker]
process_name=%(program_name)s_%(process_num)02d
command=php /home/vagrant/Code/laravel-cms/artisan queue:work --sleep=3 --tries=3
autostart=true
autorestart=true
user=vagrant
numprocs=8
redirect_stderr=true
stdout_logfile=/home/vagrant/Code/laravel-cms/worker.log

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

运行

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

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

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

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值