Yii2 queue的队列使用详解


Posted in PHP onJuly 19, 2019

少废话主要看文档

官方文档

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

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

PHP 相关文章推荐
PHP文件注释标记及规范小结
Apr 01 PHP
PHP读取PDF内容配合Xpdf的使用
Nov 24 PHP
PHP常用特殊运算符号和函数总结(php新手入门必看)
Feb 02 PHP
深入php常用函数的使用汇总
Jun 08 PHP
php写的AES加密解密类分享
Jun 20 PHP
PHP 抽象方法与抽象类abstract关键字介绍及应用
Oct 16 PHP
php+mysql查询实现无限下级分类树输出示例
Oct 03 PHP
php unicode编码和字符串互转的方法
Aug 12 PHP
浅谈PHP中pack、unpack的详细用法
Mar 12 PHP
php微信开发之音乐回复功能
Jun 14 PHP
使用SMB共享来绕过php远程文件包含的限制执行RFI的利用
May 31 PHP
宝塔面板出现“open_basedir restriction in effect. ”的解决方法
Mar 14 PHP
thinkphp5.1框架模板布局与模板继承用法分析
Jul 19 #PHP
Yii2.0框架模型添加/修改/删除数据操作示例
Jul 18 #PHP
Yii2.0框架模型多表关联查询示例
Jul 18 #PHP
php和redis实现秒杀活动的流程
Jul 17 #PHP
php web环境和命令行环境下查找php.ini的位置
Jul 17 #PHP
php命名空间设计思想、用法与缺点分析
Jul 17 #PHP
php和C#的yield迭代器实现方法对比分析
Jul 17 #PHP
You might like
php设计模式 Decorator(装饰模式)
2011/06/26 PHP
php三维数组去重(示例代码)
2013/11/26 PHP
php将mysql数据库整库导出生成sql文件的具体实现
2014/01/08 PHP
浅谈php中include文件变量作用域
2015/06/18 PHP
orm获取关联表里的属性值
2016/04/17 PHP
php解析mht文件转换成html的实例
2017/03/13 PHP
php5对象复制、clone、浅复制与深复制实例详解
2019/08/14 PHP
javascript之更有效率的字符串替换
2008/08/02 Javascript
javascript数字数组去重复项的实现代码
2010/12/30 Javascript
jquery和javascript的区别(常用方法比较)
2013/07/04 Javascript
使用JavaScript 编写简单计算器
2014/11/24 Javascript
整理AngularJS中的一些常用指令
2015/06/16 Javascript
jquery实现浮动的侧栏实例
2015/06/25 Javascript
js实现仿爱微网两级导航菜单效果代码
2015/08/31 Javascript
设计模式中的facade外观模式在JavaScript开发中的运用
2016/05/18 Javascript
jquery.uploadifive插件怎么解决上传限制图片或文件大小问题
2017/05/08 jQuery
JS实现留言板功能
2017/06/17 Javascript
JS滚动到指定位置导航栏固定顶部
2017/07/03 Javascript
详解利用Angular实现多团队模块化SPA开发框架
2017/11/27 Javascript
详解vue渲染函数render的使用
2017/12/12 Javascript
[08:07]DOTA2每周TOP10 精彩击杀集锦vol.8
2014/06/25 DOTA
Python的内存泄漏及gc模块的使用分析
2014/07/16 Python
Python正则表达式的使用范例详解
2014/08/08 Python
在python的类中动态添加属性与生成对象
2016/09/17 Python
Python爬虫番外篇之Cookie和Session详解
2017/12/27 Python
Python continue继续循环用法总结
2018/06/10 Python
python 读取dicom文件,生成info.txt和raw文件的方法
2019/01/24 Python
Python 多进程、多线程效率对比
2020/11/19 Python
Html5实现文件异步上传功能
2017/05/19 HTML / CSS
欧洲高端品牌直销店:Fashionesta
2016/08/31 全球购物
英国厨房与餐具用品为主的设计品牌:Joseph Joseph
2018/04/26 全球购物
网络技术支持面试题
2013/04/22 面试题
企业面试题试卷附带答案
2015/12/20 面试题
民主评议党员自我鉴定
2014/10/21 职场文书
小学语文新课改心得体会
2016/01/22 职场文书
Mysql数据库值的添加、修改、删除及清空操作实例
2021/06/20 MySQL