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 相关文章推荐
解决中英文字符串长度问题函数
Jan 16 PHP
php代码把全角数字转为半角数字
Dec 10 PHP
基于PHP对XML的操作详解
Jun 07 PHP
解析PHP中数组元素升序、降序以及重新排序的函数
Jun 20 PHP
PHP中的闭包(匿名函数)浅析
Feb 07 PHP
php获取当前月与上个月月初及月末时间戳的方法
Dec 05 PHP
PHP巧妙利用位运算实现网站权限管理的方法
Mar 12 PHP
PHP实现生成模糊图片的方法示例
Dec 21 PHP
PHP大文件切割上传功能实例分析
Jul 01 PHP
thinkphp3.2框架中where条件查询用法总结
Aug 13 PHP
PHP中通过getopt解析GNU C风格命令行选项
Nov 18 PHP
通过PHP的Wrapper无缝迁移原有项目到新服务的实现方法
Apr 02 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 google或baidu分页代码
2009/11/26 PHP
PHP gbk环境下json_dencode传送来的汉字
2012/11/13 PHP
PHP调用Linux的命令行执行文件压缩命令
2013/01/27 PHP
CodeIgniter中使用cookie的三种方式详解
2014/07/18 PHP
PHP使用in_array函数检查数组中是否存在某个值
2015/03/25 PHP
PHP文件上传问题汇总(文件大小检测、大文件上传处理)
2015/12/24 PHP
Yii中CArrayDataProvider和CActiveDataProvider区别实例分析
2016/03/02 PHP
Yii框架中sphinx索引配置方法解析
2016/10/18 PHP
php实现和c#一致的DES加密解密实例
2017/07/24 PHP
自己写的兼容ie和ff的在线文本编辑器类似ewebeditor
2012/12/12 Javascript
jquery三个关闭弹出层的小示例
2013/11/05 Javascript
jquery Tab效果和动态加载的简单实例
2013/12/11 Javascript
Angularjs实现上传图片预览功能
2017/09/01 Javascript
js实现鼠标跟随运动效果
2020/08/02 Javascript
vue给input file绑定函数获取当前上传的对象完美实现方法
2017/12/15 Javascript
在 React、Vue项目中使用SVG的方法
2018/02/09 Javascript
react 兄弟组件如何调用对方的方法示例
2018/10/23 Javascript
基于JavaScript实现单例模式
2019/10/30 Javascript
JS 数组和对象的深拷贝操作示例
2020/06/06 Javascript
[06:01]刀塔次级联赛top10第一期
2014/11/07 DOTA
[01:14:05]《加油DOTA》第四期
2014/08/25 DOTA
[29:59]完美世界DOTA2联赛PWL S3 Forest vs access 第二场 12.11
2020/12/13 DOTA
Linux下多个Python版本安装教程
2018/08/15 Python
python3的输入方式及多组输入方法
2018/10/17 Python
Python对Excel按列值筛选并拆分表格到多个文件的代码
2019/11/05 Python
容易被忽略的Python内置类型
2020/09/03 Python
来自圣地亚哥的实惠太阳镜:Knockaround
2018/08/27 全球购物
金融专业个人的自我评价
2013/10/18 职场文书
应届生求职信范文
2014/06/30 职场文书
一年级班主任工作总结2014
2014/11/08 职场文书
邀请书模板
2015/02/02 职场文书
大学生党员自我评价
2015/03/04 职场文书
保险公司岗前培训工作总结
2015/10/24 职场文书
创业者如何撰写出一份打动投资人的商业计划书?
2019/07/02 职场文书
标准版个人借条怎么写?以及什么是借条?
2019/08/28 职场文书
Oracle配置dblink访问PostgreSQL的操作方法
2022/03/21 PostgreSQL