• Yii使用queue实现队列


    一:安装queue

    composer require yiisoft/yii2-queue


    二:配置queue

    安装queue之后我们在项目中运行 php yii时这时候我们发现没有queue的相关命令,这是怎么回事呢?

    这是由于我们没有对queue进行配置

    注意:这里配置queue时必须使得web和console都有关于queue的配置,例如yii的基础版的console.php和web.php文件都需要进行queue配置

    yii的queue队列支持多种驱动,例:DB、Redis、RabbitMQ、AMQP、Beans.和Gearman

    这里我是用的时DB(数据库)驱动,如果你想使用其他的驱动,配置相关可以参考:https://github.com/yiisoft/yii2-queue/blob/master/docs/guide/README.md

    1. 'bootstrap' => [
    2. 'queue'//注册控制台命令
    3. ],
    4. 'components' => [
    5.         'queue' => [
    6.             'class' => 'yii\queue\db\Queue',//需要引入的queue类
    7.             'db' => 'db',//数据库配置
    8.             'tableName' => '{{%queue}}',//需要新建的队列表名
    9.             'channel' => 'test_db_queue',//队列频道密钥
    10.             'mutex' => 'yii\mutex\MysqlMutex',//用于同步查询
    11. 'ttr' => 300,//对应默认最大执行时长(秒)
    12.         ],
    13.     ],


    配置完成之后,我们在命令行上执行 php yii时发现已经有了queue的相关命令了

    queue相关命令说明:

    1. php yii queue/clear #清除队列
    2. php yii queue/exec #执行队列任务
    3. php yii queue/info #显示有关队列状态的信息(默认为此命令)
    4. php yii queue/listen #监听队列并运行队列任务
    5. php yii queue/remove #按照id删除队列任务
    6. php yii queue/run #运行所有队列任务


    由于我们使用的时DB驱动这时候我们需要新建一个对应的queue队列表,在yii中queue的队列组件中提供了queue队列表创建的方法,我们只需要在脚本配置文件中进行配置即可,配置如下:

    1. 'controllerMap' => [
    2.         'queue-migrate' => [
    3.             'class' => 'yii\console\controllers\MigrateController',
    4.             'migrationPath' => null,
    5.             'migrationNamespaces' => [
    6.                 'yii\queue\db\migrations',
    7.             ],
    8.         ],
    9.     ],


    主要上述的配置不是在components的配置内部,而是与其同级,配置完成之后我们在命令行执行php yii发现如下命令queue-migrate,此命令就是帮助我们去新建一个queue队列数据表

    php yii queue-migrate

    这时候我们就可以在我们的数据库中发现对了一张queue表

    三:使用queue

    下面我写一个简单的下载文件队列进行测试

    1:写一个下载文件的队列类:

    1. namespace app\components;
    2. use Yii;
    3. use yii\base\BaseObject;
    4. /**
    5.  * Class DownloadJob
    6.  * @package app\components
    7.  */
    8. class DownloadJob extends BaseObject implements \yii\queue\JobInterface
    9. {
    10.     public $url;
    11.     public $file;
    12.     public function execute($queue)
    13.     {
    14.         file_put_contents($this->file, file_get_contents($this->url));
    15.     }
    16. }


    2:调用队列类:

    1. Yii::$app->queue->push(new DownloadJob([
    2.             'url' => 'https://api.wj0511.com/static/upload/pic/20181030132555-623070617127980.jpg',
    3.             'file' => '/tmp/image.jpg',
    4.         ]));
    5. 你也可以推迟指定秒执行
    6. //推迟5
    7. Yii::$app->queue->delay(5 * 60)->push(new DownloadJob([
    8.             'url' => 'https://api.wj0511.com/static/upload/pic/20181030132555-623070617127980.jpg',
    9.             'file' => '/tmp/image.jpg',
    10.         ]));


    运行调用方法后,在命令行执行 php yii queue这时候我们会发现有一个等待的队列任务

    这时候我们可以使用php yii queue/run 或php yii queue/listen去执行队列任务php yii queue/listen -v可以看到执行队列的信息

  • 相关阅读:
    OFD板式文件创建JAVA工具-EASYOFD 七、 电子签章及验签 Seal
    基于python的在线文档管理系统vue
    【PAT甲级】1023 Have Fun with Numbers
    c++ count和count_if
    Redis lua_client 伪客户端生命周期
    设置Windows与Linux共享文件夹
    C. Doremy‘s IQ(贪心)
    2023旷视自驾感知算法暑期实习一面
    数组方法深入探究(1)--at&copyWithin
    两种方法教你在postman设置请求里带动态token
  • 原文地址:https://blog.csdn.net/huaweichenai/article/details/127635681