yii2自带官方queue队列模块使用方法

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

 

此条目发表在服务器分类目录,贴了, 标签。将固定链接加入收藏夹。

发表回复