laravel 队列
项目中经常会有后台运行任务的需求
一、异步处理
比如发送邮件时,因为要连接邮件服务器,往往需要5-10秒甚至更长时间,如果能先给用户一个成功的提示信息,然后在后台慢慢处理发送邮件的操作,显然会有更好的用户体验。或者发送短信
二、日志处理
日志处理是指将消息队列用在日志处理中,可以解决大量日志传输的问题
laravel中执行队列的步骤:
1、php artisan make:job autionBid
生成的文件,如图所示
2、结构方法可以进行传参数,handel方法里,可以写执行的逻辑,如图所示
handle方法在任务被队列处理的时候被调用,注意我们可以在任务的handle方法中进行依赖注入。Laravel服务容器会自动注入这些依赖。
3、推送任务到队列中
在需要执行此方法的里头,执行
$this->dispatch(new autionBid(参数));
这样队列就被推送成功
4、队列监听
php artisan queue:listen
这样队列自动监听,有时候队列会停止,为了维护队列进程,使用supervisor进行监听队列
5、在config/queue.php ,这是redis队列
6、supervisor
项目中遇到有些脚本需要通过后台进程运行,保证不被异常中断,之前都是通过nohup、&、screen来实现, Supervisor是用Python开发的一套通用的进程管理程序,能将一个普通的命令行进程变为后台daemon,并监控进程状态,异常退出时能自动重启。它是通过fork/exec的方式把这些被管理的进程当作supervisor的子进程来启动,这样只要在supervisor的配置文件中,把要管理的进程的可执行文件的路径写进去即可。也实现当子进程挂掉的时候,父进程可以准确获取子进程挂掉的信息的,可以选择是否自己启动和报警。supervisor还提供了一个功能,可以为supervisord或者每个子进程,设置一个非root的user,这个user就可以管理它对应的进程。
https://blog.tanteng.me/2017/01/supervisor-laravel-queue/
http://laravelacademy.org/post/3252.html
https://www.jianshu.com/p/445ef6820753
https://lvwenhan.com/laravel/395.html
https://www.cnblogs.com/wswang/p/5795766.html