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 相关文章推荐
检测png图片是否完整的php代码
Sep 06 PHP
phpize的深入理解
Jun 03 PHP
解析Win7 XAMPP apache无法启动的问题
Jun 26 PHP
PHP遍历并打印指定目录下所有文件实例
Feb 10 PHP
五款PHP代码重构工具推荐
Oct 14 PHP
php遍历目录方法小结
Mar 10 PHP
php通过分类列表产生分类树数组的方法
Apr 20 PHP
php微信公众平台开发之获取用户基本信息
Aug 17 PHP
提交表单后 PHP获取提交内容的实现方法
May 25 PHP
thinkPHP js文件中U方法不被解析问题的解决方法
Dec 05 PHP
PHP操作Postgresql封装类与应用完整实例
Apr 24 PHP
Laravel数据库读写分离配置的方法
Oct 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
WINDOWS服务器安装多套PHP的另类解决方案
2006/10/09 PHP
PHP安装攻略:常见问题解答(一)
2006/10/09 PHP
PHP 远程文件管理,可以给表格排序,遍历目录,时间排序
2009/08/07 PHP
php中的PHP_EOL换行符详细解析
2013/10/26 PHP
destoon在360浏览器下出现用户被强行注销的解决方法
2014/06/26 PHP
PHP实现的ID混淆算法类与用法示例
2018/08/10 PHP
PHP unset函数原理及使用方法解析
2020/08/14 PHP
js 操作select相关方法函数
2009/12/06 Javascript
电子商务网站上的常用的js放大镜效果
2011/12/08 Javascript
一个关于javascript匿名函数的问题分析
2012/03/30 Javascript
jquery实现带单选按钮的表格行选中时高亮显示
2013/08/01 Javascript
node.js WEB开发中图片验证码的实现方法
2014/06/03 Javascript
jQuery 顶部导航跟随滚动条滚动固定浮动在顶部
2014/06/06 Javascript
Jquery之Bind方法参数传递与接收的三种方法
2014/06/24 Javascript
详细解读AngularJS中的表单验证编程
2015/06/19 Javascript
jq实现左侧显示图片右侧文字滑动切换效果
2015/08/04 Javascript
jQuery实现验证年龄简单思路
2016/02/24 Javascript
[原创]JQuery 在表单提交之前修改 提交的值
2016/04/14 Javascript
jQuery插件FusionWidgets实现的AngularGauge图效果示例【附demo源码】
2017/03/23 jQuery
vue实现压缩图片预览并上传功能(promise封装)
2019/01/10 Javascript
javascript 原型与原型链的理解及应用实例分析
2020/02/10 Javascript
Python中dictionary items()系列函数的用法实例
2014/08/21 Python
Python实现求最大公约数及判断素数的方法
2015/05/26 Python
Pycharm 设置默认头的图文教程
2019/01/17 Python
Django-rest-framework中过滤器的定制实例
2020/04/01 Python
Keras搭建自编码器操作
2020/07/03 Python
html5小程序飞入购物车(抛物线绘制运动轨迹点)
2020/10/19 HTML / CSS
英国网上香水店:Fragrance Direct
2016/07/20 全球购物
正风肃纪剖析材料
2014/02/18 职场文书
合作意向书
2014/07/30 职场文书
夏季药店促销方案
2014/08/22 职场文书
遗愿清单观后感
2015/06/09 职场文书
医院岗前培训心得体会
2016/01/08 职场文书
《曾国藩家书》读后感——读家书,立家风
2019/08/21 职场文书
分享7个 Python 实战项目练习
2022/03/03 Python
Django基础CBV装饰器和中间件
2022/03/22 Python