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 相关文章推荐
获得Google PR值的PHP代码
Jan 28 PHP
php面向对象全攻略 (二) 实例化对象 使用对象成员
Sep 30 PHP
php SQL Injection with MySQL
Feb 27 PHP
php中将网址转换为超链接的函数
Sep 02 PHP
Windows下Apache + PHP SESSION丢失的解决过程全纪录
Apr 07 PHP
深入理解PHP变量的值类型和引用类型
Oct 21 PHP
php正则去除网页中所有的html,js,css,注释的实现方法
Nov 03 PHP
PHP 实现人民币小写转换成大写的方法及大小写转换函数
Nov 17 PHP
支持汉转拼和拼音分词的PHP中文工具类ChineseUtil
Feb 23 PHP
php使用QueryList轻松采集js动态渲染页面方法
Sep 11 PHP
laravel ORM关联关系中的 with和whereHas用法
Oct 16 PHP
laravel框架使用极光推送消息操作示例
Feb 15 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
人族 Terran 魔法与科技
2020/03/14 星际争霸
php 无法加载mcrypt.dll的解决办法
2013/04/03 PHP
Laravel 数据库加密及数据库表前缀配置方法
2019/10/10 PHP
javascript 写类方式之八
2009/07/05 Javascript
extjs 列表框(multiselect)的动态添加列表项的方法
2009/07/31 Javascript
某页码显示的helper 少量调整,另附js版
2010/09/12 Javascript
javascript if条件判断方法小结
2014/05/17 Javascript
javascript中一些util方法汇总
2015/06/10 Javascript
jquery自适应布局的简单实例
2016/05/28 Javascript
AngularJS基础 ng-selected 指令简单示例
2016/08/03 Javascript
nodejs中解决异步嵌套循环和循环嵌套异步的问题
2017/07/12 NodeJs
javascript 日期相减-在线教程(附代码)
2017/08/17 Javascript
使用JS中的Replace()方法遇到的问题小结
2017/10/20 Javascript
关于layui的动态图标不显示的解决方法
2019/09/04 Javascript
JS实现canvas简单小画板功能
2020/06/23 Javascript
js获取url页面id,也就是最后的数字文件名
2020/09/25 Javascript
微信小程序实现多张图片上传功能
2020/11/18 Javascript
[49:43]VG vs FNATIC 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/17 DOTA
Python生成验证码实例
2014/08/21 Python
Python中unittest用法实例
2014/09/25 Python
python爬虫 正则表达式使用技巧及爬取个人博客的实例讲解
2017/10/20 Python
利用python爬取斗鱼app中照片方法实例
2017/12/03 Python
Python+selenium实现自动循环扔QQ邮箱漂流瓶
2018/05/29 Python
详解opencv中画圆circle函数和椭圆ellipse函数
2019/12/27 Python
python3代码输出嵌套式对象实例详解
2020/12/03 Python
用纯css3和html制作泡沫对话框实现代码
2013/03/21 HTML / CSS
Canvas制作的下雨动画的示例
2018/03/06 HTML / CSS
amazeui 验证按钮扩展的实现
2020/08/21 HTML / CSS
美国杂志订阅折扣与优惠网站:Magazines.com
2016/08/31 全球购物
SQL Server提供的3种恢复模型都是什么? 有什么区别?
2012/05/13 面试题
2014年学校领导班子对照检查材料
2014/09/19 职场文书
工地材料员岗位职责
2015/04/11 职场文书
反邪教学习心得体会
2016/01/15 职场文书
《小蝌蚪找妈妈》教学反思
2016/02/23 职场文书
详解JSON.parse和JSON.stringify用法
2022/02/18 Javascript
动画电影《龙珠超 超级英雄》延期上映
2022/03/20 日漫