yii-queue搭配redis的使用
安装yii-queue扩展
composer
require
--prefer-dist yiisoft/yii2-queue
注释:composer已配置全局变量,所以可以直接使用composer进行安装
配置
common/config/main.php 中配置,使用redis作为驱动
components中添加 'bootstrap' => [ 'queue', ], 'redis' => [ 'class' => 'yii\redis\Connection', 'hostname' => '127.0.0.1', 'port' => 6379, 'database' => 0, ], 'queue' => [ 'class' => \yii\queue\redis\Queue::class, 'as log' => \yii\queue\LogBehavior::class,//错误日志 默认为 console/runtime/logs/app.log 'redis' => 'redis', // 连接组件或它的配置 'channel' => 'queue', // Queue channel key ],
启动
项目内启动
进入项目的根目录,执行下列命令:
yii queue/listen
linux环境下,进程的启动
阿里云安装命令:
yum install supervisor
配置:
进入/etc/supervisord.d
创建文件,
文件名需要以.ini结尾,假定文件名为queue1.ini
文件内容为:
[program:pro_queue]
process_name=%(program_name)s_%(process_num)02d
command=php /var/www/html/project_name/yii queue/listen --verbose=1 --color=0
autostart=true
autorestart=true
user=root
numprocs=4
redirect_stderr=true
stdout_logfile=/var/log/projectName/yii-queue-worker.log
注释:program:项目名,自定义command:启动的命令,/var/www/html/project_name为项目的根目录,yii queue/listen为队列的启动命令
user:supervisor执行的角色
stdout_logfile:日志,自定义存储路径
启动进程
systemctl start supervisord
队列的使用
创建队列文件SendEmailTask.php
<?php namespace common\queue; use PHPMailer\PHPMailer\PHPMailer; use yii\base\BaseObject; use Yii;
/** * 异步发送邮件 */ class SendEmailTask extends BaseObject implements \yii\queue\JobInterface { public $subject;//邮件的标题 public $body;//邮件的内容 public $address;//发送的邮件地址 public function execute($queue) { $mailParam = include_once dirname(dirname(dirname(__FILE__))).'/frontend/config/params.php';//调用邮件的配置文件 $mail = new PHPMailer();//实例化邮件的队形 $mail->CharSet = "UTF-8";//设置编码格式 $mail->isSMTP(); $mail->Host = $mailParam['adminHost']; // Specify main and backup SMTP servers $mail->SMTPAuth = true; // Enable SMTP authentication $mail->Username = $mailParam['adminEmail'];//发送者邮箱 $mail->Password = $mailParam['adminPassword'];//发送邮件密码 $mail->SMTPSecure = $mailParam['adminSecure']; $mail->Port = $mailParam['adminPort']; // TCP port to connect to $mail->setFrom($mailParam['adminEmail'], $mailParam['adminFromName']); $mail->addAddress($this->address); $mail->isHTML(true); $mail->Subject = $this->subject; $mail->Body = $this->body; $mail->send(); } }
将任务追加到队列:
在要调用队列的地方,添加下列语句:
Yii::$app->queue->push(new SendEmailTask([ 'subject' => $subject, 'body' => $body, 'address' => $email, ]));
注释:参数时队列对象里的属性
到这里队列就可以使用了,队列的监听进程,监听到新的任务进入队列时,会相应的进行对列任务的处理。
上一篇: c语言对utf8字符串的截取
下一篇: Queue