欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

【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’

相关标签: php yii 队列