概述
yii2-queue是一个yii官方推出的队列扩展库,主要通过队列异步运行任务,它支持基于DB,Redis,RabbitMQ,Beanstalk和Gearman的队列。
来源
安装
1 | composer require yiisoft/yii2-queue |
或者
1 | 在composer中添加"yiisoft/yii2-queue": "~2.0.0",然后持续composer install |
操作步骤
发送到队列的每个任务应该被定义为一个单独的类。例如,如果您需要下载并保存文件,则该类可能如下所示:
下面的例子以redis作为驱动,其它驱动
首先我们配置redis的驱动,注意如果没有yiisoft/yii2-redis包的话要先执行composer require yiisoft/yii2-redis,再在/common/config/
注意要为queue配置一个queue的redis配置1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18'bootstrap' => [
'queue', // The component registers own console commands
],
'compoents' => [
...//其它的配置
'redis_queue' => [
'class' => 'yii\redis\Connection',
'hostname' => 'redis',
'port' => '6379',
'database' => 0,
],
'queue' => [
'class' => \yii\queue\redis\Queue::class,
'redis' => 'redis2', // Redis connection component or its config
'channel' => 'queue', // Queue channel key
'as log' => \yii\queue\LogBehavior::class
],
]
1 | class DownloadJob extends Object implements \yii\queue\Job |
以下是将任务发送到队列中的方法:
1 | Yii::$app->queue->push(new DownloadJob([ |
将作业推入5分钟后运行的队列:
1 | Yii::$app->queue->delay(5 * 60)->push(new DownloadJob([ |
执行任务的方式取决于所使用的驱动程序。大部分的驱动程序可以使用控制台命令运行,组件应该在应用程序中注册。
在循环中获取并执行任务的命令,直到队列为空:
1 | yii queue/run |
命令启动一个无限查询队列的守护程序:
1 | yii queue/listen |
该组件具有跟踪被推入队列的作业的状态的能力。
1 |
|
使用Supervisor管理php yii queue/listen
Supervisor是Linux的进程监视器。它会自动启动您的控制台进程。要在Ubuntu上安装,您需要运行命令:1
sudo apt-get install supervisor
主管配置文件通常可用/etc/supervisor/conf.d。您可以创建任意数量的配置文件。
配置示例:1
2
3
4
5
6
7
8
9[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