Yii2 queue的队列使用

yii2 centos7 Yii2 · systemofdown · 于 4年前 发布 · 2982 次阅读

少废话主要看文档 官方文档 https://github.com/yiisoft/yii2-queue/blob/master/docs/guide/README.md

yii2-queue 的使用

1.安装

composer require --prefer-dist yiisoft/yii2-queue

2.配置,在 common/config/main.php 中配置

redis作为驱动

    return [
        'bootstrap' => [
            'queue', // 把这个组件注册到控制台
        ],
        'components' => [
            'redis' => [
                'class' => \yii\redis\Connection::class,
                // ...
            ],
            'queue' => [
                'class' => \yii\queue\redis\Queue::class,
                'as log' => \yii\queue\LogBehavior::class,//错误日志 默认为 console/runtime/logs/app.log
                'redis' => 'redis', // 连接组件或它的配置
                'channel' => 'queue', // Queue channel key
            ],
        ],
    ];

File 作为驱动

    return [
        'bootstrap' => [
            'queue', // 把这个组件注册到控制台
        ],
        'components' => [
            'queue' => [
                'class' => \yii\queue\file\Queue::class,
                'as log' => \yii\queue\LogBehavior::class,//错误日志 默认为 console/runtime/logs/app.log
                'path' => '@runtime/queue',
            ],
        ],
    ];

3.新建 frontend/components/DownloadJob

    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));
        }
    }

4.控制台

控制台用于监听和处理队列任务。 cmd 下 监听队列

    yii queue/listen

5.添加到队列

将任务添加到队列:

    Yii::$app->queue->push(new frontend\components\DownloadJob([
        'url' => 'http://example.com/image.jpg',
        'file' => '/tmp/image.jpg',
    ]));

将任务推送到队列中延时5分钟运行:

    Yii::$app->queue->delay(5 * 60)->push(new frontend\components\DownloadJob([
        'url' => 'http://example.com/image.jpg',
        'file' => '/tmp/image.jpg',
    ]));

6.测试

执行 5 中的程序,控制台监听到,便会后台自动 下载http://example.com/image.jpg到本地为/tmp/image.jpg

启动worker

可以使用Supervisor或Systemd 来启动多进程worker,也可以使用 Cron,我们这里主要说一下Supervisor

centos7 supervisor的使用

1.安装supervisor

    yum update
    yum install epel-release
    yum install -y supervisor
    #开机启动
    systemctl enable supervisord
    #启动
    systemctl start supervisord

2.supervisor 命令

    supervisorctl status 查看进程状态
    supervisorctl reload 重启supervisord
    supervisorctl start|stop|restart 启动关闭重启进程

3.添加配置文件

Supervisor 配置文件通常在 /etc/supervisord.d 目录下. 你可以创建一些配置文件在这里. 注:文件名是.ini结尾

下面就是个例子:

    [program:yii-queue-worker]
    process_name=%(program_name)s_%(process_num)02d
    command=/usr/bin/php /var/www/my_project/yii queue/listen --verbose=1 --color=0
    autostart=true
    autorestart=true
    user=www-data
    numprocs=4
    redirect_stderr=true
    stdout_logfile=/var/www/my_project/log/yii-queue-worker.log

本文由 systemofdown 创作,采用 知识共享署名 3.0 中国大陆许可协议 进行许可。 可自由转载、引用,但需署名作者且注明文章出处。

共收到 0 条回复
没有找到数据。
添加回复 (需要登录)
需要 登录 后方可回复, 如果你还没有账号请点击这里 注册