Yii2.0 文件队列的使用

薄洪涛4年前PHP1389

最近做了一个文件上传+处理的功能,需求是这样的,上传并读取.doc文件,并解析里面的内容入库

读取文件并入库是使用python处理的,每个文件大约需要处理5-6秒,上传是使用的Yii2,我这里的思路是把上传和处理的逻辑分离,上传成功之后,增加处理任务到队列中,这里选用的是文件队列,之所以选文件队列的原因是功能简单,而且文件队列不依赖任何第三方

第一步,composer下载FileQueue

composer require --prefer-dist yiisoft/yii2-queue

第二步,main.php配置组件,这里我使用的是文件队列,如果想使用其他的队列也可以配置

'queue' => [
    'class' => \yii\queue\file\Queue::class,
    'as log' => \yii\queue\LogBehavior::class,//错误日志 默认为 console/runtime/logs/app.log
    'path' => '@runtime/queue',
],

第三步,main.php注册组件

'bootstrap' => ['queue'],

第四步,入队及出队处理

class FileQueue extends \yii\base\BaseObject implements \yii\queue\JobInterface
{
    public $file; // 文件绝对路径
    public $task_id; // 任务id
    public function execute($queue)
    {
        // TODO: Implement execute() method.
        // 这里写你的处理任务
    }
}

// 入队
Yii::$app->queue->push(new FileQueue([
    'task_id' => $_model->id,
    'file' => '/www/wwwroot/fd-admin/web/uploads/'.$_model->filename
]));

第五步,队列的状态

控制台用于监听和处理队列任务。
yii queue/listen [wait]
listen命令启动一个守护进程,它可以无限查询队列。如果有新的任务,他们立即得到并执行。
wait是下一次查询队列的时间 当命令正确地通过supervisor来实现时,这种方法是最有效的。
yii queue/run
run命令获取并执行循环中的任务,直到队列为空。适用与cron。
run与listen命令的参数:
--verbose,-v: 将执行状态输出到控制台。
--isolate: 详细模式执行作业。如果启用,将打印每个作业的执行结果。
--color: 高亮显示输出结果。
yii queue/info
info命令打印关于队列状态的信息。

注意,如果需要使用yii命令,需要在console.php中配置和main.php一样的组件

标签: 文件队列

相关文章

php使用curl获取elasticsearch中数据

我最近在做一个电动车的项目,其中,有一个功能是这样的,我需要获取指定车辆的最新的五条位置信息,位置信息是保存到es库中的,我使用的是Yii2.0框架,本来想使用Yii封装的组件去获取数据的,然后觉得麻...

PostgreSQL教程之安装连接

PostgreSQL教程之安装连接

新公司需要用PostgreSQL数据库,而且网上的资料比较少,先自己整理一下;一、PostgreSQL是什么?PostgreSQL是一个功能强大的开源对象关系数据库管理系统(ORDBMS)。 用于安全...

Yii2.0中事件的使用及理解

Yii2.0中事件的使用及理解

    Yii 三大特性:属性,事件,行为;这篇文章咱们讲讲Yii事件;    事件是代码解耦的一种方式,设计业务流程的...

Yii2.0搭建接口模块教程

Yii2.0搭建接口模块教程

最近我需要做一个大项目中的一个模块,考虑用前后端分离,所以想自己搭建一套基于Yii2.0的restful接口出来,本来的时候老大想让我用spring boot,无奈我太菜只会php.....教程开始:...

大文件之分片上传

大文件之分片上传

    我们知道,无论是nginx还是php,都会对上传文件的大小做限制,今天刚刚做了一个客户端包的管理,要求上传apk或者ipa文件,而且都不小(超出了php...

php程序是如何被解析的?

php程序是如何被解析的?

我们每天都在写php代码,然后往服务器上一丢,你就发现php文件就运行了,嘿,是不是很神奇,但是有没有想过,php是如何被解释执行的呢?要知道apache,nginx都是不能解析.php文件的;所以想...

发表评论    

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。