一、安装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
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
namespace app\queues\demo;
use yii\base\BaseObject;
use yii\queue\JobInterface;
class TestController extends BaseObject implements JobInterface
{
public $params = [];
public function execute($queue)
{
print_r($this->params);
}
}
➜ git:(develop) vim commands/TmpController.php
<?php
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
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
stdout_logfile_backups=5 ;
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
stderr_logfile_backups=5 ;
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]
yii-queue: added process group
[root@test02 supervisord.d]
yii-queue RUNNING pid 31078, uptime 0:37:06
[root@test02 supervisord.d]
www 31078 0.0 0.1 498244 17044 ? Sl 13:20 0:00 /usr/local/bin/php yii queue/listen --verbose=1 --color=0