Yii使用queue实现队列
huaweichenai -一:安装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/yi...
'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可以看到执行队列的信息
php介绍
PHP即“超文本预处理器”,是一种通用开源脚本语言。PHP是在服务器端执行的脚本语言,与C语言类似,是常用的网站编程语言。PHP独特的语法混合了C、Java、Perl以及 PHP 自创的语法。利于学习,使用广泛,主要适用于Web开发领域。
Tags 标签
phpyiiqueue扩展阅读
隐藏apache版本信息
2018-09-30 10:56:15 []CentOS 6.5安装php5.6
2018-09-30 11:36:53 []PHP版ZIP压缩解压类库
2018-12-22 13:11:00 []CentOS7.2安装 PHP7.3.4 操作详细教程
2020-06-28 19:09:43 []PHP 设置脚本超时时间、PHP脚本内存限制设置
2020-06-28 19:09:43 []PHP 函数filesize获取文件大小错误,一直不变
2020-06-28 19:09:43 []Linux php: command not found
2020-02-05 01:30:13 []php 缓冲区 buffer 原理
2020-06-28 19:09:43 []PHP中三种设置脚本最大执行时间的方法
2020-06-28 19:17:34 []加个好友,技术交流
