美文网首页
laravel5.3使用队列

laravel5.3使用队列

作者: _立斌 | 来源:发表于2018-08-07 15:10 被阅读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
    

    相关文章

      网友评论

          本文标题:laravel5.3使用队列

          本文链接:https://www.haomeiwen.com/subject/cgfavftx.html