Yii使用queue实现队列流程讲解

 更新时间:2022年11月02日 16:11:21   作者:huaweichenai  
Yii是一个高性能的PHP5的web应用程序开发框架。通过一个简单的命令行工具yiic可以快速创建一个web应用程序的代码框架,开发者可以在生成的代码框架基础上添加业务逻辑,以快速完成应用程序的开发

一、安装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(数据库)驱动,如果你想使用其他的驱动,配置相关可以参考:传送门

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

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

queue相关命令说明:

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

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

'controllerMap' => [
        'queue-migrate' => [
            'class' => 'yii\console\controllers\MigrateController',
            'migrationPath' => null,
            'migrationNamespaces' => [
                'yii\queue\db\migrations',
            ],
        ],
    ],

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

php yii queue-migrate

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

三、使用queue

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

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

<?php
namespace app\components;
use Yii;
use yii\base\BaseObject;
/**
 * Class DownloadJob
 * @package app\components
 */
class DownloadJob extends BaseObject implements \yii\queue\JobInterface
{
    public $url;
    public $file;
    public function execute($queue)
    {
        file_put_contents($this->file, file_get_contents($this->url));
    }
}

2:调用队列类:

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

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

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

到此这篇关于Yii使用queue实现队列流程讲解的文章就介绍到这了,更多相关Yii queue内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • php生成随机验证码图片的示例代码

    php生成随机验证码图片的示例代码

    这篇文章主要介绍了php生成随机验证码图片的示例代码,结合实例形式分析了php生成随机验证码图片的实现方法与相关操作注意事项,文中有详细的代码示例,需要的朋友可以参考下
    2023-09-09
  • php配置php-fpm启动参数及配置详解

    php配置php-fpm启动参数及配置详解

    php-fpm 启动参数及重要配置详解,这个不用多说,做PHP开发的同学都需要用。
    2013-11-11
  • php下封装较好的数字分页方法

    php下封装较好的数字分页方法

    php下数字分页函数代码,需要的朋友可以参考下。
    2010-11-11
  • php实现的替换敏感字符串类实例

    php实现的替换敏感字符串类实例

    这篇文章主要介绍了php实现的替换敏感字符串类,包括了常见的非法字符串检测、白名单、黑名单及字符替换等功能,非常实用,需要的朋友可以参考下
    2014-09-09
  • ExtJS与PHP、MySQL实现存储的方法

    ExtJS与PHP、MySQL实现存储的方法

    ExtJS与PHP、MySQL实现存储的方法,需要的朋友可以参考下,里面有详细的步骤。
    2010-04-04
  • 一个完整的PHP类包含的七种语法说明

    一个完整的PHP类包含的七种语法说明

    这篇文章主要介绍了一个完整的PHP类包含的七种语法说明,这些语法包括属性、静态属性、方法、静态方法、类常量、构造函数、析构函数,本文一一给代码示例和详细注解让你快速了解类的写法,需要的朋友可以参考下
    2015-06-06
  • php字符串截取问题

    php字符串截取问题

    我希望将一个字符串限长显示,如果该字符串超过一定长数,就截取前n个字符,后加省略号
    2006-11-11
  • 如何使用PHP依赖管理工具Composer

    如何使用PHP依赖管理工具Composer

    Composer是php的一个依赖管理工具,允许你声明项目所依赖的代码库,它会在你的项目中为你安装他们。这篇文章教你如何使用Composer。
    2021-05-05
  • 谈谈PHP连接Access数据库的注意事项

    谈谈PHP连接Access数据库的注意事项

    有的时候需要用php连接access数据库,结果整了半天Access数据库就是连接不上,查找很多资料,以下是些个人经验,希望能给需要连接access 数据的人带来帮助。
    2016-08-08
  • PHP中获取时间的下一周下个月的方法

    PHP中获取时间的下一周下个月的方法

    PHP中获取时间的下一周,下个月等通常用于定制服务的时候使用,比如包月会员,包年等等
    2014-03-03

最新评论