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 相关文章推荐
新版mysql+apache+php Linux安装指南
Oct 09 PHP
PHP 裁剪图片成固定大小代码方法
Sep 09 PHP
php判断输入不超过mysql的varchar字段的长度范围
Jun 24 PHP
一个经典实用的PHP图像处理类分享
Nov 18 PHP
php_imagick实现图片剪切、旋转、锐化、减色或增加特效的方法
Dec 15 PHP
php生成4位数字验证码的实现代码
Nov 23 PHP
PHP使用stream_context_create()模拟POST/GET请求的方法
Apr 02 PHP
PHP array_key_exists检查键名或索引是否存在于数组中的实现方法
Jun 13 PHP
curl 出现错误的调试方法(必看)
Feb 13 PHP
PHP有序表查找之二分查找(折半查找)算法示例
Feb 09 PHP
PHP常用正则表达式精选(推荐)
May 28 PHP
PHP dirname(__FILE__)原理及用法解析
Oct 28 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
德劲1107的电路分析与打磨
2021/03/02 无线电
建立文件交换功能的脚本(三)
2006/10/09 PHP
php中将图片gif,jpg或mysql longblob或blob字段值转换成16进制字符串
2011/08/23 PHP
php自定义的格式化时间示例代码
2013/12/05 PHP
PHP错误Parse error: syntax error, unexpected end of file in test.php on line 12解决方法
2014/06/23 PHP
PHP文件锁定写入实例解析
2014/07/14 PHP
destoon首页调用求购供应信息的地区名称的方法
2014/08/21 PHP
php中限制ip段访问、禁止ip提交表单的代码分享
2014/08/22 PHP
php继承中方法重载(覆盖)的应用场合
2015/02/09 PHP
jQuery 跨域访问问题解决方法
2009/12/02 Javascript
修复ie8&chrome下window的resize事件多次执行
2011/10/20 Javascript
js 自动播放的实例代码
2013/11/19 Javascript
Bootstrap每天必学之导航组件
2016/04/25 Javascript
javascript正则表达式中分组详解
2016/07/17 Javascript
JS常见疑难点分析之match,charAt,charCodeAt,map,search用法分析
2016/12/25 Javascript
javascript设计模式之策略模式学习笔记
2017/02/15 Javascript
Node.js查找当前目录下文件夹实例代码
2017/03/07 Javascript
详解webpack+vue-cli项目打包技巧
2017/06/17 Javascript
JS加密插件CryptoJS实现AES加密操作示例
2018/08/16 Javascript
JS实现提示框跟随鼠标移动
2019/08/27 Javascript
微信小程序vant弹窗组件的实现方式
2020/02/21 Javascript
[03:42]2014DOTA2国际邀请赛 第三日比赛排位扑朔迷离
2014/07/12 DOTA
[52:08]DOTA2上海特级锦标赛主赛事日 - 3 败者组第三轮#2Fnatic VS OG第一局
2016/03/05 DOTA
python验证码识别的实例详解
2016/09/09 Python
python中快速进行多个字符替换的方法小结
2016/12/15 Python
详解python的sorted函数对字典按key排序和按value排序
2018/08/10 Python
Python 模拟生成动态产生验证码图片的方法
2020/02/01 Python
Keras在训练期间可视化训练误差和测试误差实例
2020/06/16 Python
详解用selenium来下载小姐姐图片并保存
2021/01/26 Python
python 列表推导和生成器表达式的使用
2021/02/01 Python
CSS3.0实现霓虹灯按钮动画特效的示例代码
2021/01/12 HTML / CSS
电子狗项圈:eDog Australia
2019/12/04 全球购物
关于运动会的口号
2014/06/07 职场文书
学习朴航瑛老师爱岗敬业先进事迹思想汇报
2014/09/17 职场文书
2016十一国庆节感言
2015/12/09 职场文书
使用php的mail()函数实现发送邮件功能
2021/06/03 PHP