当前位置:首页 > CMS教程 > 其它CMS > 列表

Yii2 queue的队列使用详解

发布:smiling 来源: PHP粉丝网  添加日期:2021-12-05 16:51:31 浏览: 评论:0 

这篇文章主要介绍了Yii2 queue的队列使用详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧。

少废话主要看文档

官方文档

yii2-queue 的使用

1.安装

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

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

redis作为驱动

  1. return [ 
  2.   'bootstrap' => [ 
  3.     'queue'// 把这个组件注册到控制台 
  4.   ], 
  5.   'components' => [ 
  6.     'redis' => [ 
  7.       'class' => \yii\redis\Connection::class
  8.       // ... 
  9.     ], 
  10.     'queue' => [ 
  11.       'class' => \yii\queue\redis\Queue::class
  12.       'as log' => \yii\queue\LogBehavior::class,//错误日志 默认为 console/runtime/logs/app.log 
  13.       'redis' => 'redis'// 连接组件或它的配置 
  14.       'channel' => 'queue'// Queue channel key 
  15.     ], 
  16.   ], 
  17. ]; 

File 作为驱动

  1. return [ 
  2.   'bootstrap' => [ 
  3.     'queue'// 把这个组件注册到控制台 
  4.   ], 
  5.   'components' => [ 
  6.     'queue' => [ 
  7.       'class' => \yii\queue\file\Queue::class
  8.       'as log' => \yii\queue\LogBehavior::class,//错误日志 默认为 console/runtime/logs/app.log 
  9.       'path' => '@runtime/queue'
  10.     ], 
  11.   ], 
  12. ]; 

3.新建 frontend/components/DownloadJob

  1. class DownloadJob extends BaseObject implements \yii\queue\JobInterface 
  2.   public $url
  3.   public $file
  4.     
  5.   public function execute($queue
  6.   { 
  7.     file_put_contents($this->file, file_get_contents($this->url)); 
  8.   } 

4.控制台

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

cmd 下 监听队列

yii queue/listen

5.添加到队列

将任务添加到队列:

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

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

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

6.测试

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

启动worker

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

centos7 supervisor的使用

1.安装supervisor

  1. yum update 
  2. yum install epel-release 
  3. yum install -y supervisor 
  4. #开机启动 
  5. systemctl enable supervisord 
  6. #启动 
  7. systemctl start supervisord 

2.supervisor 命令

supervisorctl status 查看进程状态   

supervisorctl reload 重启supervisord

supervisorctl start|stop|restart 启动关闭重启进程

3.添加配置文件

Supervisor 配置文件通常在 /etc/supervisord.d 目录下. 你可以创建一些配置文件在这里.

注:文件名是.ini结尾

下面就是个例子:

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

Tags: Yii2队列 queue队列

分享到:

相关文章