【yii2---queue】file类型队列
程序员文章站
2024-03-18 08:15:16
...
第一步:
安装扩展
composer.json中
require里面增加
"yiisoft/yii2-queue": "^2.3",
安装
php composer.phar require --prefer-dist yiisoft/yii2-queue
yii原生的队列可以支持多种驱动,在配置前还是要先选好驱动。
1.File驱动
'queue' => [//队列文件方式
'class' => \yii\queue\redis\Queue::class,
'as log' => \yii\queue\LogBehavior::class,//错误日志 默认为 console/runtime/logs/app.log
'channel' => 'test-queue', // 队列名称
],
2.Redis
'queue' => [//Redis方式
'class' => \yii\queue\redis\Queue::class,
'redis' => 'redis', //连接组件或他的配置
'channel' => 'test-queue', // 队列名称
],
需要有对应redis的配置,config/web.php 类似
'redis' =>[
'class' => 'yii\redis\Connection',
'hostname' => '127.0.0.1', //你的redis地址,windows建议使用127.0.0.1,否则会巨慢
'port' => 6779, //端口
'database' => 0,
'password' => '123123',
],
该redis配置应该同步到console.php 这里会影响到队列的运行
第二步:
使用File类型做驱动举例,新建一个类TestJob.php
<?php
namespace app\jobs;
use yii\base\BaseObject;
use yii\queue\JobInterface;
class TestJob extends BaseObject implements JobInterface{
public $orderInfo;
public function execute($queue)
{
file_put_contents(\Yii::$app->basePath . DIRECTORY_SEPARATOR . 'runtime/logs/test-job-' . date('Y-m-d') . '.txt', "[" . date('Y-m-d H:i:s') . "]" ."这是一个测试". PHP_EOL, FILE_APPEND);
}
}
?>
在controller里面调用该类:
Yii::$app->queue->push(new TestJob([
'orderInfo' => $this->order
]));
那么问题来了,什么时候数据入队列?什么时候出队列?
首先可以使用 php yii queue/listen 监听队列,如果队列有值,会立马执行
还可以使用php yii queue/info 查看队列状态
第三步:
执行上述controller文件,前提要在控制台执行php yii queue/listen,这时就会发现队列已经执行了,log文件里面已经有内容了
截止到现在,只要队列里面有数据,就会被监听执行,那么如果想结束监听怎么办?
很简单啦,找到该监听进程 kill掉
ps aux | grep ‘queue/listen’
上一篇: Java 中的队列 Queue
下一篇: 漫话Redis源码之三十五
推荐阅读
-
【yii2---queue】file类型队列
-
php实现不通过扩展名准确判断文件类型的方法【finfo_file方法与二进制流】
-
PHP使用finfo_file()函数检测上传图片类型的实现方法
-
PHP使用finfo_file()函数检测上传图片类型的实现方法
-
php实现不通过扩展名准确判断文件类型的方法【finfo_file方法与二进制流】
-
input file accept,上传文件、下载文件类型限制格式 ,常用MIME类型列表
-
PHP的parse_ini_file()函数,解释结构类型php.ini格式的文件
-
java中表示一个文件的File类型详解
-
html input="file" 浏览时只显示指定文件类型 xls、xlsx、csv_html/css_WEB-ITnose
-
php amqp 消息队列 RabbitMQ 交换器类型 直连 (三)_PHP教程