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 split汉字
Jun 05 PHP
php学习笔记 php中面向对象三大特性之一[封装性]的应用
Jun 13 PHP
PHP编码转换
Nov 05 PHP
php如何调用webservice应用介绍
Nov 24 PHP
简单实用的网站PHP缓存类实例
Jul 18 PHP
php解析xml方法实例详解
May 12 PHP
Zend Framework教程之Resource Autoloading用法实例
Mar 08 PHP
zen cart实现订单中增加paypal中预留电话的方法
Jul 12 PHP
PHP基于imagick扩展实现合成图片的两种方法【附imagick扩展下载】
Nov 14 PHP
浅谈laravel-admin的sortable和orderby使用问题
Oct 03 PHP
详细分析PHP 命名空间(namespace)
Jun 30 PHP
PhpStorm 2020.3:新增开箱即用的PHP 8属性(推荐)
Oct 30 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
如何在WIN2K下安装PHP4.04
2006/10/09 PHP
Trying to clone an uncloneable object of class Imagic的解决方法
2012/01/11 PHP
自己在做项目过程中学到的PHP知识收集
2012/08/20 PHP
php求正负数数组中连续元素最大值示例
2014/04/11 PHP
php实现过滤表单提交中html标签的方法
2014/10/17 PHP
帝国cms目录结构分享
2015/07/06 PHP
php动态读取数据清除最右边距的方法
2017/04/12 PHP
PHP中的Iterator迭代对象属性详解
2019/04/12 PHP
PHP底层运行机制与工作原理详解
2020/07/31 PHP
JavaScript入门教程(10) 认识其他对象
2009/01/31 Javascript
获得所有表单值的JQuery实现代码[IE暂不支持]
2012/05/24 Javascript
原生javascript和jquery判断浏览器版本等信息
2013/07/04 Javascript
JavaScript中实现PHP的打乱数组函数shuffle实例
2014/10/11 Javascript
jQuery中:only-child选择器用法实例
2015/01/03 Javascript
JS匿名函数和匿名自执行函数概念与用法分析
2018/03/16 Javascript
javascript和php使用ajax通信传递JSON的实例
2018/08/21 Javascript
jQuery实现弹幕特效
2019/11/29 jQuery
vue 在服务器端直接修改请求的接口地址
2020/12/19 Vue.js
JavaScript 声明私有变量的两种方式
2021/02/05 Javascript
python中wx将图标显示在右下角的脚本代码
2013/03/08 Python
在Python3中初学者应会的一些基本的提升效率的小技巧
2015/03/31 Python
Python遍历目录的4种方法实例介绍
2015/04/13 Python
Python使用time模块实现指定时间触发器示例
2017/05/18 Python
python爬虫入门教程--利用requests构建知乎API(三)
2017/05/25 Python
Flask入门之上传文件到服务器的方法示例
2018/07/18 Python
wxPython实现文本框基础组件
2019/11/18 Python
python爬虫筛选工作实例讲解
2020/11/23 Python
python 根据列表批量下载网易云音乐的免费音乐
2020/12/03 Python
HTML5画渐变背景图片并自动下载实现步骤
2013/11/18 HTML / CSS
HTML5声音录制/播放功能的实现代码
2018/05/03 HTML / CSS
Holland & Barrett爱尔兰:英国领先的健康零售商
2019/03/31 全球购物
2014年国庆节演讲稿精选范文1500字
2014/09/25 职场文书
优秀教师推荐材料
2014/12/16 职场文书
2015年安全员工作总结范文
2015/04/22 职场文书
十八大观后感
2015/06/12 职场文书
Pandas实现DataFrame的简单运算、统计与排序
2022/03/31 Python