Yii2.0 文件队列的使用

薄洪涛4年前PHP1302

最近做了一个文件上传+处理的功能,需求是这样的,上传并读取.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一样的组件

标签: 文件队列

相关文章

Yii2使用phpOffice导出excel报错

Yii2使用phpOffice导出excel报错

线上导出excel的时候,是不是出现无法访问,如下图因为导出的数据量比较大,我怀疑是内存溢出,于是增加了内存分配值,发现仍然报错,于是我查了下日志,如下2020-08-14 21:31:12...

【转】TCP长连接和短连接区别

【转】TCP长连接和短连接区别

    当网络通信时采用TCP协议时,在真正的读写操作之前,server与client之间必须建立一个连接,当读写操作完成后,双方不再需要这个连接时它们可以释放...

不同语言AES加密结果不同

不同语言AES加密结果不同

最近一直在和某保险公司的联调接口,他们的接口是AES加密过的,就是请求的报文体需要加密,返回的报文体需要解密;java实现的,然后我这边用php去调用,发现先了一件诡异的事情,两种语言的加密结果不一致...

YII2独立开发遇到的坑

    之前开发的时候,遇到图片上传什么的都是直接用前辈们配好的插件等等,换了家公司以后,要自己独立开发项目,顿时遇到了问题,开始是项目的配置,然后在添加的时候遇到了图片上传的问题...

Elasticsearch第三篇之全文搜索及在Yii2.0中的使用

Elasticsearch第三篇之全文搜索及在Yii2.0中的使用

前几天做了一个模块,大数据的搜索,其实也不是特别大,组合起来差不多800万左右,用的是mysql数据库,需求有这么变态的两点;需要按照地址去搜索按照起止时间去搜索别的不说,就这两条,mysql也就只能...

php高级特性之反射

何为反射?字面理解,就是根据到达找到源;在面向对象编程中的反射就是根据对象去找出它所属的类,及类的方法,详情;首先声明一点,反射在实际开发中用的很少(至少我没用过),但是在编写文档的时候,可以用于文档...

发表评论    

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