今天为了熟悉yii2队列模块如何,查了下官方有,首先要安装扩展插件,在项目目录命令行模式下执行以下代码:
php composer.phar require --prefer-dist yiisoft/yii2-queue
或者添加以下内容
"yiisoft/yii2-queue": "~2.0"
到composer.json文件里面,然后执行composer update。
添加配置在common\config公共目录下的main.php或main-local.php选择一个加入以下内容。其中队列保存信息可以选择file,redis,db等各种数据存储方式,这里首先选择文件方式,其它根据自己需求选择测试。
<?php
return [
'components' => [
'redis' => [
'class' => 'yii\redis\Connection',
'hostname' => '192.168.0.100',
'port' => 6379,
'database' => 0,
],
'cache' => [
'class' => 'yii\caching\FileCache',
],
'queue' => [//队列文件方式
'class' => \yii\queue\file\Queue::class,
'as log' => \yii\queue\LogBehavior::class,//错误日志 默认为 console/runtime/logs/app.log
'path' => '@console/runtime/queue',//这样控制台才能操作到
//'path' => '@runtime/queue',
],
/*'queue' => [//队列redis
'class' => \yii\queue\redis\Queue::class,
'redis' => 'redis', // 连接组件或它的配置
'channel' => 'queue', // Queue channel key
],*/
],
'bootstrap' => [
'queue', // 把这个组件注册到控制台
],
];
接着就要创建相关文件了
首先在common\components公共目录下创建Job.php文件,内容如下,队列执行的任务类,让这个类实现 \yii\queue\JobInterface 接口就可以了。
<?php
/**
* Created by PhpStorm.
* User: ken
* Date: 2018/7/12
* Time: 16:19
*/
namespace common\components;
use yii\base\BaseObject;
class Job extends BaseObject implements \yii\queue\JobInterface
{
public $url;
public $file;
public function execute($queue)
{
file_put_contents($this->file, file_get_contents($this->url));
}
}
然后就在项目任意控制器下,添加以下内容来添加队列的内容:测试环境是windows
use common\components\Job;
public function actionJob(){
//添加任务到队列
Yii::$app->queue->push(new Job([
'url' => '//www.netpc.com.cn/wp-content/uploads/2018/06/12080502tmd.jpg',
'file' => 'c:\1.jpg',
]));
// 将作业推送到队列并获得其ID
$id=Yii::$app->queue->delay(1 * 30)->push(new Job([
'url' => '//www.netpc.com.cn/wp-content/uploads/2018/06/12080502tmd.jpg',
'file' => 'c:\2.jpg',
]));
// 这个作业等待执行。
//Yii::$app->queue->isWaiting($id);
// Worker 从队列获取作业,并执行它。
//Yii::$app->queue->isReserved($id);
// Worker 作业执行完成。
//Yii::$app->queue->isDone($id);
}
执行后会在@console/runtime/queue目录下生产index.data和jobXXX.data一堆任务文件,XXX是任务编号。
添加完队列后就要来执行它了,命令行下控制台执行队列worker,windows下是运行cmd,对应项目目录下,执行以下命令。当执行成功一个任务后会删除对应文件同时更新index.data文件。
yii queue/clear//清空初始化
yii queue/run// 执行
yii queue/listen //监听队列
yii queue/info来//队列状态
其它内容可以参考官方网址:
https://github.com/yiisoft/yii2-queue/blob/master/docs/guide-zh-CN/README.md

