适用于Laravel 5.3
关于代码,可参考文档和租租的代码。
服务器配置:
会使用队列管理器supervisor,并以ubuntu为例:
1、安装supervisor
sudo apt-get install supervisor
2、配置supervisor
Supervisor配置文件通常存放在/etc/supervisor/conf.d目录,在该目录中,可以创建多个配置文件指示Supervisor如何监视进程,例如,让我们创建一个开启并监视queue:work进程的laravel-worker.conf文件:
[program:laravel-worker]
process_name=%(program_name)s_%(process_num)02d
command=php /data/htdocs/zuzu/lease/server/artisan queue:work sqs --sleep=3 --tries=3
autostart=true
autorestart=true
user=user
numprocs=8
redirect_stderr=true
stdout_logfile=/data/supervisor/zuzu/worker.log
在本例中,numprocs指令让Supervisor运行8个queue:work进程并监视它们,如果失败的话自动重启。配置文件创建好了之后,可以使用如下命令更新Supervisor配置并开启进程:
解释:
command是要执行的命令,这里是执行artisan命令。上面的代码是laravelacademy的代码,但是实际中无法运行,需要删除“sqs”。或者要保证命令在命令行里可以执行,然后再复制到这里。
user是操作的用户,一般是root,如果项目的user不是root或者是其他,那这里可能需要改为相应的user。
Stdout_logfile 日志文件存放处,请保证该目录及文件的权限。
3、启动supervisor
当你成功创建配置文件后,你需要刷新Supervisor 的配置信息:
sudo supervisorctl reread
sudo supervisorctl update
sudo supervisorctl start laravel-worker:*
4、laravel代码
(1)新建队列任务(这里以发送线上订单状态变化消息为例)
php artisan make:job SendOnlineOrderStatusChangeMsg
(2)在handle方法里执行代码逻辑
public function handle(AudioProcessor $processor)
{
// 执行逻辑
}
(3)委派任务
$job = (new SendOnlineOrderStatusChangeMsg(
$user->openid,$content,$order->order_no,(string)$now_time,'',1
))->delay(Carbon::now()->addSecond(1));
dispatch($job);
其中delay是对任务进行延迟执行,这里延迟1秒执行。
5、如果laravel中新增或修改了jobs,则服务器需要在启动supervisor的基础上,进行reload,这样才会加载到最新修改的jobs文件。
sudo supervisorctl reload
网友评论