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 相关文章推荐
dede3.1分页文字采集过滤规则详说(图文教程)续四
Apr 03 PHP
php下删除一篇文章生成的多个静态页面
Aug 08 PHP
php empty,isset,is_null判断比较(差异与异同)
Oct 19 PHP
用PHP实现Ftp用户的在线管理
Feb 16 PHP
一个漂亮的php验证码类(分享)
Aug 06 PHP
PHP下的Oracle客户端扩展(OCI8)安装教程
Sep 10 PHP
ThinkPHP写数组插入与获取最新插入数据ID实例
Nov 03 PHP
详解php比较操作符的安全问题
Dec 03 PHP
php实现图片上传并利用ImageMagick生成缩略图
Mar 14 PHP
Yii2 RESTful中api的使用及开发实例详解
Jul 06 PHP
thinkPHP5.0框架安装教程
Mar 25 PHP
thinkphp整合系列之极验滑动验证码geetest功能
Jun 18 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
阿里对象存储OSS在laravel框架中的使用方法
2019/10/13 PHP
编辑浪子版表单验证类
2007/05/12 Javascript
jquery定时滑出可最小化的底部提示层特效代码
2013/10/02 Javascript
Jquery 动态循环输出表格具体方法
2013/11/23 Javascript
jquery 操作两个select实现值之间的互相传递
2014/03/07 Javascript
jquery实现先淡出再折叠收起的动画效果
2015/08/07 Javascript
win7下安装配置node.js+express开发环境
2015/12/06 Javascript
BootStrap 附加导航组件
2016/07/22 Javascript
textarea 在浏览器中固定大小和禁止拖动的实现方法
2016/12/03 Javascript
JS实现给对象动态添加属性的方法
2017/01/05 Javascript
js如何判断是否在iframe中及防止网页被别站用iframe嵌套
2017/01/11 Javascript
JavaScript数据结构之链表的实现
2017/03/19 Javascript
jQuery编写textarea输入字数限制代码
2017/03/23 jQuery
使用prop解决一个checkbox选中后再次选中失效的问题
2017/07/05 Javascript
node实现定时发送邮件的示例代码
2017/08/26 Javascript
Hexo已经看腻了,来手把手教你使用VuePress搭建个人博客
2018/04/26 Javascript
微信网页授权并获取用户信息的方法
2018/07/30 Javascript
Vue2.0 实现歌手列表滚动及右侧快速入口功能
2018/08/08 Javascript
vue-cli3.0配置及使用注意事项详解
2018/09/05 Javascript
vue中使用props传值的方法
2019/05/08 Javascript
node省市区三级数据性能测评实例分析
2019/11/06 Javascript
解决Antd Table表头加Icon和气泡提示的坑
2020/11/17 Javascript
python ftp 按目录结构上传下载的实现代码
2018/09/12 Python
Django Rest framework频率原理与限制
2019/07/26 Python
PYTHON EVAL的用法及注意事项解析
2019/09/06 Python
安装2019Pycharm最新版本的教程详解
2019/10/22 Python
python实现MySQL指定表增量同步数据到clickhouse的脚本
2021/02/26 Python
html5本地存储 localStorage操作使用详解
2016/09/20 HTML / CSS
HTML5利用约束验证API来检查表单的输入数据的代码实例
2016/12/20 HTML / CSS
美体小铺美国官网:The Body Shop美国
2017/11/10 全球购物
乌克兰在线药房:Аптека24
2019/10/30 全球购物
电子商务专业学生的自我鉴定
2013/11/28 职场文书
酒店辞职书怎么写
2015/02/26 职场文书
军训决心书范文
2015/09/22 职场文书
优秀毕业生主要事迹材料
2015/11/04 职场文书
Python Matplotlib绘制两个Y轴图像
2022/04/13 Python