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入门源程序
Oct 09 PHP
基于数据库的在线人数,日访问量等统计
Oct 09 PHP
PHP 基本语法格式
Dec 15 PHP
php+js实现异步图片上传实例分享
Jun 02 PHP
PHP实现的下载远程图片自定义函数分享
Jan 28 PHP
php生成不重复随机数、数组的4种方法分享
Mar 30 PHP
四个PHP非常实用的功能
Sep 29 PHP
php数组实现根据某个键值将相同键值合并生成新二维数组的方法
Apr 26 PHP
利用PHP获取访客IP、地区位置、浏览器及来源页面等信息
Jun 27 PHP
php框架CodeIgniter主从数据库配置方法分析
May 25 PHP
PHP时间日期增减操作示例【date strtotime实现加一天、加一月等操作】
Dec 21 PHP
JS中彻底删除JSON对象组成的数组中的元素
Sep 22 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 文件上传全攻略
2010/04/28 PHP
fleaphp rolesNameField bug解决方法
2011/04/23 PHP
php写的简易聊天室代码
2011/06/04 PHP
PHP中使用foreach和引用导致程序BUG的问题介绍
2012/09/05 PHP
基于PHP静态类的原罪详解
2013/05/06 PHP
PHP实现二维数组去重功能示例
2017/01/12 PHP
PHP面向对象程序设计模拟一般面向对象语言中的方法重载(overload)示例
2019/06/13 PHP
php用wangeditor3实现图片上传功能
2019/08/22 PHP
使用jquery.upload.js实现异步上传示例代码
2014/07/29 Javascript
Node.js中防止错误导致的进程阻塞的方法
2016/08/11 Javascript
微信小程序 支付简单实例及注意事项
2017/01/06 Javascript
解决vue 按钮多次点击重复提交数据问题
2018/05/10 Javascript
微信小程序实现左右联动的实战记录
2018/07/05 Javascript
使用vue根据状态添加列表数据和删除列表数据的实例
2018/09/29 Javascript
使用watch在微信小程序中实现全局状态共享
2019/06/03 Javascript
详解如何在Vue项目中发送jsonp请求
2019/10/25 Javascript
webpack 最佳配置指北(推荐)
2020/01/07 Javascript
vue从零实现一个消息通知组件的方法详解
2020/03/16 Javascript
Vue文本模糊匹配功能如何实现
2020/07/30 Javascript
[03:56]还原FTP电影首映式 DOTA2群星拼出遗迹世界
2014/03/26 DOTA
详解Django中的过滤器
2015/07/16 Python
python logging模块的使用总结
2019/07/09 Python
Python实现字符串中某个字母的替代功能
2019/10/21 Python
在TensorFlow中屏蔽warning的方式
2020/02/04 Python
Python类的绑定方法和非绑定方法实例解析
2020/03/04 Python
Python3实现个位数字和十位数字对调, 其乘积不变
2020/05/03 Python
详解pycharm连接远程linux服务器的虚拟环境的方法
2020/11/13 Python
HTML5+CSS3实例 :canvas 模拟实现电子彩票刮刮乐代码
2016/12/30 HTML / CSS
Urban Outfitters美国官网:美国生活方式品牌
2016/08/26 全球购物
汉语言文学毕业生求职信
2013/10/01 职场文书
《中国的气候》教学反思
2014/02/23 职场文书
初中班级口号
2014/06/09 职场文书
中秋联欢会主持词
2015/07/04 职场文书
公司人事管理制度
2015/08/05 职场文书
《亲亲我的妈妈》观后感(3篇)
2019/09/26 职场文书
MySQL 时间类型的选择
2021/06/05 MySQL