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 相关文章推荐
codeigniter集成ucenter1.6双向通信的解决办法
Jun 12 PHP
PHP计算一年多少个星期和每周的开始和结束日期
Jul 01 PHP
PHP结合JQueryJcrop实现图片裁切实例详解
Jul 24 PHP
PHP中一些可以替代正则表达式函数的字符串操作函数
Nov 17 PHP
Yii配置文件用法详解
Dec 04 PHP
php ci 获取表单中多个同名input元素值的代码
Mar 25 PHP
详解Yii2.0 rules验证规则集合
Mar 21 PHP
PHP迭代与递归实现无限级分类
Aug 28 PHP
PHP实现的迪科斯彻(Dijkstra)最短路径算法实例
Sep 16 PHP
php爬取天猫和淘宝商品数据
Feb 23 PHP
PHP使Laravel为JSON REST API返回自定义错误的问题
Oct 16 PHP
php array 转json及java 转换 json数据格式操作示例
Nov 13 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 simplexmlElement操作xml的命名空间实现代码
2011/01/04 PHP
PHP入门之常量简介和系统常量
2014/05/12 PHP
Pro JavaScript Techniques学习笔记
2010/12/28 Javascript
js简单实现Select互换数据的方法
2015/08/17 Javascript
js制作带有遮罩弹出层实现登录注册表单特效代码分享
2015/09/05 Javascript
jQuery中deferred对象使用方法详解
2016/07/14 Javascript
微信小程序 触控事件详细介绍
2016/10/17 Javascript
详解利用jsx写vue组件的方法示例
2017/07/17 Javascript
移动设备手势事件库Touch.js使用详解
2017/08/18 Javascript
html中通过JS获取JSON数据并加载的方法
2017/11/30 Javascript
vue登录注册及token验证实现代码
2017/12/14 Javascript
解决vue v-for 遍历循环时key值报错的问题
2018/09/06 Javascript
vue中如何去掉空格的方法实现
2018/11/09 Javascript
如何让微信小程序页面之间的通信不再变困难
2019/06/03 Javascript
vue-cli创建的项目中的gitHooks原理解析
2020/02/14 Javascript
Vue实现腾讯云点播视频上传功能的实现代码
2020/08/17 Javascript
[01:35]2018完美盛典章节片——共竞
2018/12/17 DOTA
Python中的map、reduce和filter浅析
2014/04/26 Python
python绘图库Matplotlib的安装
2014/07/03 Python
Redis使用watch完成秒杀抢购功能的代码
2018/05/07 Python
python 筛选数据集中列中value长度大于20的数据集方法
2018/06/14 Python
Python调用百度根据经纬度查询地址的示例代码
2019/07/07 Python
QML使用Python的函数过程解析
2019/09/26 Python
Python字节单位转换实例
2019/12/05 Python
Python爬虫实例——爬取美团美食数据
2020/07/15 Python
Python reques接口测试框架实现代码
2020/07/28 Python
微信小程序之html5 canvas绘图并保存到系统相册
2019/06/20 HTML / CSS
韩国美国时尚服装和美容在线全球市场:KOODING
2018/11/07 全球购物
Nip + Fab官网:英国美容品牌
2019/08/26 全球购物
草船借箭教学反思
2014/02/03 职场文书
优秀团队获奖感言
2014/02/19 职场文书
小学作文评语大全
2014/04/21 职场文书
小学语文教研活动总结
2014/07/01 职场文书
关于旅游的活动方案
2014/08/15 职场文书
音乐剧猫观后感
2015/06/04 职场文书
2016拓展训练心得体会范文
2016/01/12 职场文书