Yii2.0 文件队列的使用

薄洪涛4年前PHP1516

最近做了一个文件上传+处理的功能,需求是这样的,上传并读取.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.0 jQuery(...).yiiActiveForm is not a function

Yii2.0 jQuery(...).yiiActiveForm is not a function

记一个常见的错误,如下图当我们在view中创建一个activeForm的时候,有时会报这种错误;通常情况下,是jquery重复引入导致的,因为你引入的jquey的版本跟yii2自带jquery版本冲突...

php用curl模拟post请求接口的坑

php用curl模拟post请求接口的坑

我们的接口是用java实现的,然后我需要用php去调用下接口,请求方式为post,需要传一个数组过去(不是json_encode的那种),之前的时候,是这么写的$post_params =&...

Elasticsearch按照日期聚合

Elasticsearch按照日期聚合

我们现在做的是医疗的业务,有个需求是这样的,查询出某位医生前七天的坐诊记录,并且,医生的坐诊记录是不连续的,这样就需要写一个dsl语句来实现es库的搜索首先我使用了es库中的聚合功能,按照日期去聚合,...

Yii2.0行为Behavior的理解

Yii2.0行为Behavior的理解

在说什么叫行为之前,觉得说下行为的作用比较好;使用行为(behavior)可以在不修改现有类的情况下,对类的功能进行扩充。通过将行为绑定到一个类,可以使得类具有行为本身所具有的属性和方法;在设计原则中...

phpstorm配置xdebug

phpstorm配置xdebug

1、首先写个phpinfo文件,然后访问,查看是否有xdebug扩展,如果没有请查看第二步,有的话直接第三步2,安装xdebug扩展,首先复制phpinfo页面所有(phpinfo页面直接ctrl+a...

抢红包的一些实现思路

抢红包的一些实现思路

最近探索了关于抢红包的一些实现思路,在此记录下本篇文章主要探讨了金额随机算法关于分布式锁的一些探索我们开始,首先说下抢红包的业务流程,分为两步,发红包和抢红包,在抢红包的时候,并发是非常大的,我们这里...

发表评论    

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