安装扩展包
php composer.phar require --prefer-dist yiisoft/yii2-queue
修改配置文件
console.php、web.php
bootstrap加入queue
components加入
'queue'=> [
'class'=> \yii\queue\redis\Queue::class,
'redis'=>'redis',// Redis connection component or its config
'channel'=>'queue',// Queue channel key queue在redis中key的前缀
'as log'=> \yii\queue\LogBehavior::class,-
],
'redis'=>[
'class'=>'yii\redis\Connection',
'hostname'=>'127.0.0.1',
'port'=>6379,
'database'=>0,
],
推送消息
public function actionQueueTest(){
// 将作业推入队列并获取消息 ID。
$id = Yii::$app->queue->delay(5)->push(new QueueTestTask());
// 检查作业是否正在等待执行
$res = Yii::$app->queue->isWaiting($id);
// 检查一个worker是否从队列中得到了作业并执行它
$res = Yii::$app->queue->isReserved($id);
// 检查是否有worker执行了job。
$res = Yii::$app->queue->isDone($id);
}
消费消息,执行业务处理
use yii\base\BaseObject;
use yii\queue\JobInterface;
use yii\queue\Queue;
class QueueTestTask extends BaseObject implements JobInterface
{
public function execute($queue)
{
// 消费消息,执行业务处理
}
}
运行程序
该命令循环获取并执行任务,直到队列为空:
yii queue/run
此命令启动一个无限查询队列的守护进程:
yii queue/listen
打印列队信息
queue/info
运行错误
请求超时:
[Composer\Downloader\TransportException]
curl error 28 while downloading https://asset-packagist.org/p/provider-latest/40ce441d60eeced1fd0e68db9b7ddd0c2c75fde5d99f83ce098cb01dea9350fd.json: Timeout was reached
解决办法修改composer.json文件:
"repositories": [
{
"type": "composer",
"url": "https://mirrors.aliyun.com/composer/"
}
]
文件权限不足,设置config下文件权限