laravel5.3使用队列

2018-08-07  本文已影响0人  _立斌

适用于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
上一篇下一篇

猜你喜欢

热点阅读