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 相关文章推荐
php5 and xml示例
Nov 22 PHP
用PHP中的 == 运算符进行字符串比较
Nov 26 PHP
php adodb连接带密码access数据库实例,测试成功
May 14 PHP
PHP Smarty生成EXCEL文档的代码
Aug 23 PHP
PHP制作百度词典查词采集器
Jan 29 PHP
php获取错误信息的方法
Jul 17 PHP
文件上传之SWFUpload插件(代码)
Jul 30 PHP
PHP将MySQL的查询结果转换为数组并用where拼接的示例
May 13 PHP
对PHP依赖注入的理解实例分析
Oct 09 PHP
浅谈Laravel队列实现原理解决问题记录
Aug 19 PHP
PHP 断点续传实例详解
Nov 11 PHP
Laravel框架生命周期与原理分析
Jun 12 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判断远程url是否有效的几种方法小结
2011/10/08 PHP
基于PHP对XML的操作详解
2013/06/07 PHP
php使用fopen创建utf8编码文件的方法
2014/10/31 PHP
PHP使用DOM和simplexml读取xml文档的方法示例
2017/02/08 PHP
PHP 中常量的知识整理
2017/04/14 PHP
PHP 自动加载类原理与用法实例分析
2020/04/14 PHP
javascript下对于事件、事件流、事件触发的顺序随便说说
2010/07/17 Javascript
ExtJS4 组件化编程,动态加载,面向对象,Direct
2011/05/12 Javascript
捕获键盘事件(且兼容各浏览器)
2013/07/03 Javascript
自制的文件上传JS控件可支持IE、chrome、firefox etc
2014/04/18 Javascript
EasyUI中combobox默认值注意事项
2015/03/01 Javascript
最简单的JavaScript验证整数、小数、实数、有效位小数正则表达式
2015/04/17 Javascript
jQuery 选择同时包含两个class的元素的实现方法
2016/06/01 Javascript
Bootstrap Metronic完全响应式管理模板之菜单栏学习笔记
2016/07/08 Javascript
JS打开摄像头并截图上传示例
2017/02/18 Javascript
BootStrap的双日历时间控件使用
2017/07/25 Javascript
浅析Visual Studio Code断点调试Vue
2018/02/27 Javascript
微信小程序开发之自定义tabBar的实现
2018/09/06 Javascript
如何在微信小程序中存setStorage
2019/12/13 Javascript
javascript中innerHTML 获取或替换html内容的实现代码
2020/03/17 Javascript
[03:10]超级美酒第四天 fy拉比克秀 大合集
2018/06/05 DOTA
Python中的生成器和yield详细介绍
2015/01/09 Python
Python实现的文本编辑器功能示例
2017/06/30 Python
Python+OpenCV目标跟踪实现基本的运动检测
2018/07/10 Python
Python3.5 Pandas模块之DataFrame用法实例分析
2019/04/23 Python
python 实现识别图片上的数字
2019/07/30 Python
python实现模拟器爬取抖音评论数据的示例代码
2021/01/06 Python
animation和transition的区别
2020/10/12 HTML / CSS
Bergfreunde丹麦:登山装备网上零售商
2017/02/26 全球购物
人力资源部培训专员岗位职责
2014/01/02 职场文书
十八届三中全会感言
2014/03/10 职场文书
个人委托书怎么写
2014/04/04 职场文书
作风大整顿心得体会
2014/09/10 职场文书
向女朋友道歉的话
2015/01/20 职场文书
2015年五一劳动节演讲稿
2015/03/18 职场文书
Win11任务栏太宽了怎么办?一招解决Win11任务栏太宽问题
2021/11/21 数码科技