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 相关文章推荐
一个oracle+PHP的查询的例子
Oct 09 PHP
Discuz! Passport 通行证整合
Mar 27 PHP
通过JavaScript或PHP检测Android设备的代码
Mar 09 PHP
php 深入理解strtotime函数的使用详解
May 23 PHP
PHP Cookie的使用教程详解
Jun 03 PHP
PHP rawurlencode与urlencode函数的深入分析
Jun 08 PHP
php通过ajax实现双击table修改内容
Apr 28 PHP
PHP常用编译参数中文说明
Sep 27 PHP
php中json_encode UTF-8中文乱码的更好解决方法
Sep 28 PHP
php计算多个集合的笛卡尔积实例详解
Feb 16 PHP
PHP Pipeline 实现中间件的示例代码
Apr 26 PHP
PHP 扩展Memcached命令用法实例总结
Jun 04 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 输出简单动态WAP页面
2009/06/09 PHP
php5 non-thread-safe和thread-safe这两个版本的区别分析
2010/03/13 PHP
codeigniter教程之多文件上传使用示例
2014/02/11 PHP
PHP设计模式之工厂模式与单例模式
2016/09/28 PHP
PHP命令空间namespace及use的用法小结
2017/11/27 PHP
PHP模型Model类封装数据库操作示例
2019/03/14 PHP
基于jquery的一个浮动框(扩展性比较好 )
2010/08/27 Javascript
JS实现的通用表单验证插件完整实例
2015/08/20 Javascript
JS实现不使用图片仿Windows右键菜单效果代码
2015/10/22 Javascript
JavaScript判断用户名和密码不能为空的实现代码
2016/05/16 Javascript
使用vue框架 Ajax获取数据列表并用BootStrap显示出来
2017/04/24 Javascript
jQuery实现简单的抽奖游戏
2017/05/05 jQuery
jQuery UI Draggable + Sortable 结合使用(实例讲解)
2017/09/07 jQuery
修改UA在PC中访问只能在微信中打开的链接方法
2017/11/27 Javascript
vue+swiper实现侧滑菜单效果
2017/12/28 Javascript
详解JS取出两个数组中的不同或相同元素
2019/03/20 Javascript
vue+element项目中过滤输入框特殊字符小结
2019/08/07 Javascript
解决element-ui里的下拉多选框 el-select 时,默认值不可删除问题
2020/08/14 Javascript
[04:44]DOTA2西游记战队视频彩蛋流出 师徒开黑巧遇林书豪
2016/08/03 DOTA
JS设计模式之责任链模式实例详解
2018/02/03 Python
pip install urllib2不能安装的解决方法
2018/06/12 Python
python模拟登陆,用session维持回话的实例
2018/12/27 Python
Python离线安装PIL 模块的方法
2019/01/08 Python
pandas对dataFrame中某一个列的数据进行处理的方法
2019/07/08 Python
python3的print()函数的用法图文讲解
2019/07/16 Python
利用python读取YUV文件 转RGB 8bit/10bit通用
2019/12/09 Python
在PyCharm中实现添加快捷模块
2020/02/12 Python
Numpy中ndim、shape、dtype、astype的用法详解
2020/06/14 Python
速比涛英国官网:Speedo英国
2019/07/15 全球购物
高中学生干部学习的自我评价
2014/02/21 职场文书
幼儿园健康教育方案
2014/06/14 职场文书
松材线虫病防治方案
2014/06/15 职场文书
建筑管理专业求职信
2014/07/28 职场文书
2015年度物流工作总结
2015/04/30 职场文书
担保书范文
2019/07/09 职场文书
用Python生成会跳舞的美女
2022/01/18 Python