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 相关文章推荐
PHP 中的面向对象编程:通向大型 PHP 工程的办法
Dec 03 PHP
Fatal error: Call to undefined function curl_init()解决方法
Apr 09 PHP
谨慎使用PHP的引用原因分析
Sep 06 PHP
php-fpm配置详解
Feb 12 PHP
ThinkPHP入库出现两次反斜线转义及数据库类转义的解决方法
Nov 04 PHP
php图片的二进制转换实现方法
Dec 15 PHP
php通过array_merge()函数合并关联和非关联数组的方法
Mar 18 PHP
PHP中Socket连接及读写数据超时问题分析
Jul 19 PHP
thinkPHP5.0框架整体架构总览【应用,模块,MVC,驱动,行为,命名空间等】
Mar 25 PHP
关于PHP通用返回值设置方法
Mar 31 PHP
从ThinkPHP3.2.3过渡到ThinkPHP5.0学习笔记图文详解
Apr 03 PHP
基于ThinkPHP5框架使用QueryList爬取并存入mysql数据库操作示例
May 25 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
当年上海收录机产品生产,进口和价格情况
2021/03/04 无线电
php地址引用(php地址引用的效率问题)
2012/03/23 PHP
改写函数实现PHP二维/三维数组转字符串
2013/09/13 PHP
PHP速成大法
2015/01/30 PHP
PHP实现微信提现功能
2018/09/30 PHP
PHP中散列密码的安全性分析
2019/07/26 PHP
基于Jquery的仿照flash放大图片效果代码
2011/03/16 Javascript
jquery插件制作 自增长输入框实现代码
2012/08/17 jQuery
javascript数字格式化通用类 accounting.js使用
2012/08/24 Javascript
jquery插件如何使用 jQuery操作Cookie插件使用介绍
2012/12/15 Javascript
Javascript实现关联数据(Linked Data)查询及注意细节
2013/02/22 Javascript
Backbone.js中的集合详解
2015/01/14 Javascript
纯JavaScript代码实现移动设备绘图解锁
2015/10/16 Javascript
详解js中的apply与call的用法
2016/07/30 Javascript
vuejs绑定class和style样式
2017/04/11 Javascript
JS实现针对给定时间的倒计时功能示例
2017/04/11 Javascript
js 发布订阅模式的实例讲解
2017/09/10 Javascript
gulp教程_从入门到项目中快速上手使用方法
2017/09/14 Javascript
微信小程序出现wx.navigateTo页面不跳转问题的解决方法
2017/12/26 Javascript
微信小程序踩坑记录之解决tabBar.list[3].selectedIconPath大小超过40kb
2018/07/04 Javascript
JS学习笔记之数组去重实现方法小结
2019/05/29 Javascript
Vue+iview+webpack ie浏览器兼容简单处理
2019/09/20 Javascript
jQuery高级编程之js对象、json与ajax用法实例分析
2019/11/01 jQuery
VUEX-action可以修改state吗
2019/11/19 Javascript
ant-design表单处理和常用方法及自定义验证操作
2020/10/27 Javascript
[02:41]辉夜杯现场一家三口 “我爸玩风行 我玩血魔”
2015/12/27 DOTA
python fabric实现远程部署
2017/01/05 Python
python判断单向链表是否包括环,若包含则计算环入口的节点实例分析
2019/10/23 Python
用python解压分析jar包实例
2020/01/16 Python
python利用os模块编写文件复制功能——copy()函数用法
2020/07/13 Python
语文教学感言
2014/02/06 职场文书
师德建设实施方案
2014/03/21 职场文书
我的中国梦演讲稿小学篇
2014/08/19 职场文书
公司行政专员岗位职责
2014/08/24 职场文书
搞笑结婚保证书
2015/05/08 职场文书
运动会开幕式新闻稿
2015/07/17 职场文书