今天为了熟悉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