yii 中使用redis队列并配置supervisor守护进程

一、安装yii-queue

➜   git:(develop) vim composer.json
……
"require": {
    ……
    "yiisoft/yii2-queue": "^2.3"
    ……
}
……

➜   git:(develop)  composer install -vvv

二、添加配置

git:(develop) vim config/web.php
……
'bootstrap' => ['queue'],
……
'components' => [
    ……
    'queue' => [
        'class' => \yii\queue\redis\Queue::class,
        'as log' => \yii\queue\LogBehavior::class,
        'redis' => 'redis',
        'channel' => 'queue',
    ]
]
……

三、新建Helper

git:(develop) vim library/services/QueueHelper.php

<?php
/**
 * Created by tg-yii.
 * User: ogenes
 * Date: 2021/11/29
 */

namespace app\library\services;


use Yii;
use yii\queue\JobInterface;
use yii\queue\redis\Queue;

class QueueHelper
{
    public static function getQueue(): Queue
    {
        return Yii::$app->queue;
    }

    public static function push(JobInterface $instance)
    {
        return self::getQueue()->push($instance);
    }
}


四、demo


# 新建队列对象,完善异步执行逻辑git:(develop) vim queues/demo/TestController.php
<?php
/**
 * Created by tg-yii.
 * User: ogenes
 * Date: 2021/11/29
 */

namespace app\queues\demo;


use yii\base\BaseObject;
use yii\queue\JobInterface;

class TestController extends BaseObject implements JobInterface
{
    public $params = [];

    /**
     * @inheritDoc
     */
    public function execute($queue)
    {
        print_r($this->params);
    }
}


#触发推送消息git:(develop) vim commands/TmpController.php
<?php
/**
 * Created by tg-yii.
 * User: ogenes
 * Date: 2021/11/29
 */

namespace app\commands;


use app\library\services\QueueHelper;
use app\queues\demo\TestController;

class TmpController extends BaseCommand
{
    public function actionTx()
    {
        $instance =  new TestController([
            'params' => [
                'fffffdd',
                'ffff'
            ]
        ]);
        $messageId = QueueHelper::push($instance);
        print_r($messageId);
    }
}git:(develop)  php yii tmp/tx

五、监听执行

➜   git:(develop) php yii queue/listen
Array
(
    [0] => fffffdd
    [1] => ffff
)

六、使用supervisor管理

新增 supervisor.ini文件

➜   git:(develop) vim queues/supervisord.ini
[program:yii-queue]
command=/usr/local/bin/php yii queue/listen --verbose=1 --color=0
directory=/var/www/application/current
process_name=%(program_name)s ; process_name expr (default %(program_name)s)
numprocs=1                    ; number of processes copies to start (def 1)
startsecs=1                   ; number of secs prog must stay running (def. 1)
startretries=3                ; max # of serial start failures (default 3)
autostart=true
autorestart=true
user=www                   ; setuid to this UNIX account to run the program
redirect_stderr=true          ; redirect proc stderr to stdout (default false)
stdout_logfile=/home/logs/application/queue.log
stdout_logfile_maxbytes=10MB  ; max # logfile bytes b4 rotation (default 50MB)
stdout_logfile_backups=5     ; # of stdout logfile backups (default 10)
stdout_capture_maxbytes=1MB   ; number of bytes in 'capturemode' (default 0)
stdout_events_enabled=false   ; emit events on stdout writes (default false)
stderr_logfile=/home/logs/application/queue_err.log
stderr_logfile_maxbytes=10MB  ; max # logfile bytes b4 rotation (default 50MB)
stderr_logfile_backups=5     ; # of stderr logfile backups (default 10)
stderr_capture_maxbytes=1MB   ; number of bytes in 'capturemode' (default 0)
stderr_events_enabled=false   ; emit events on stderr writes (default false)


到服务器上链接到 supervisorctl 的配置文件

[root@test02 supervisord.d]# ln -snf /var/www/application/current/queues/supervisord.ini /etc/supervisord.d/yii-queue.ini && /usr/bin/supervisorctl update
yii-queue: added process group
[root@test02 supervisord.d]# supervisorctl status yii-queue
yii-queue                        RUNNING   pid 31078, uptime 0:37:06

[root@test02 supervisord.d]# ps aux | grep yii | grep queue
www      31078  0.0  0.1 498244 17044 ?        Sl   13:20   0:00 /usr/local/bin/php yii queue/listen --verbose=1 --color=0

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值