laravel 队列的使用

1,概述

项目中有一些操作比较好事,例如发送邮件 推送app,视频转码,日志存储等,如果使用同步方式的话 那么系统性能大大降低

所有我们可以使用异步进行处理这些任务.可以使用laravel 的队列功能

2,Laravel队列的配置

 

2.1  . env 设置


QUEUE_DRIVER=redis 驱动选择 可以为 database sqs redis 我们这里已reids为例

2.2创建队列任务类

使用artisan 可以快速创建一个任务类 位于 App\Jobs文件夹下

php artisan make:job SendEmail

data = $data;
    }

    /**
     * Execute the job.
     *
     * @return void
     */
    public function handle()
    {

        $data = $this->data;
        (new AppModel())->sendMailByTmp('change_profile_for_admin.xml'
            , $data['params']
            , $data['email']
            , VAR_CS_MAIL_ADDRESS);
    }
}

2.3 控制器中将数据加入到队列中

 $sendDatas = [
                'params'=>$sendParams,
                'email'=> $this->userInfo->mail
            ];
 $this->dispatch((new SendEmail($sendDatas))->onQueue('sendEmail'));

 $this->dispatch((new SendEmail($sendDatas))->onQueue('sendEmail'));

dispatch()方法是分发任务的方法,

2.4启动队列

使用 php artisan queue:work --queue=sendEmail   //指定启动哪个队列

 

队列已经启动 在等待元素加入

使用postman模拟个请求触发加入队列

 

队列执行成功

这样运行超过300秒会报错 可以使用supervisor 将队列添加到守护进程中 

3.supervisor

3.1安装

ubuntu  执行 apt-get install supervisor 安装

3.2配置

在/etc/supervisor/conf.d目录下创建 一个队列的配置文件

touch sendEmail.conf

编辑

[program:sendEmail]
process_name=%(program_name)s_%(process_num)02d
command=php /项目根目录/artisan queue:work --queue=sendEmail --tries=3
autostart=true
autorestart=true
user=root
numprocs=8
redirect_stderr=true
stdout_logfile=/var/log/supervisor/laravel-queue.log

然后执行 

sudo supervisorctl reread

sudo supervisorctl update

sudo supervisorctl start sendEmail:*

查看队列状态

sudo supervisorctl status

 

 

你可能感兴趣的:(laravel 队列的使用)