gearman管理工具GearmanManager的安装与php使用方法示例


Posted in PHP onFebruary 27, 2020

本文实例讲述了gearman管理工具GearmanManager的安装与php使用方法。分享给大家供大家参考,具体如下:

一、gearman自带了一个gearadmin工具

查看帮助信息

> gearadmin --help

查看状态

> gearadmin --status

查看worker信息

> gearadmin --workers

二、为什么要用GearmanManager

为什么要用GearmanManager来管理我们的worker,因为我们用php编写的worker是要常驻后台运行的。
而且一旦worker过多时,代码更新,难道要一个一个手动重启,显然这是很麻烦的。如果中途出现意外中断或内存泄漏也不好管理。

网上的解决方案一般有如下二种:
1、通过定时任务crontab来定时的重启worker
2、通过php的pcntl扩展,创建多进程来运行worker,主进程监控子进程,如果子进程退出,则重新启动一个子进程来运行worker。

三、使用GearmanManager

GearmanManager下载地址:

https://github.com/brianlmoon/GearmanManager/releases

如:GearmanManager-2.1.0.tar.gz

1、我们创建一个目录用来存放worker的代码

> mkdir -p /data/workers

2、然后我们创建一个sum.php的worker文件,用来处理计算两个数之和。

sum.php代码如下:

<?php
//注意函数名与文件名相同
function sum($job) {
 //workload()获取客户端发送来的序列化数据
 $data = json_decode($job->workload(), true);
 //计算并返回结果
 return $data[0] + $data[1];
}

当然还有面向对象式的代码如下:

<?php
//注意类名与文件名相同
class sum {
 public function run($job) {
  //workload()获取客户端发送来的序列化数据
  $data = json_decode($job->workload(), true);
  //计算并返回结果
  return $data[0] + $data[1];
 }
}

3、解压下载的GearmanManager压缩包

> tar xf GearmanManager-2.1.0.tar.gz
> mv GearmanManager-2.1.0 /data/GearmanManager
> cd /data/GearmanManager

我们只需要关心bin和etc这两个目录,etc目录下提供了三个配置文件

config-advanced.ini 高级配置
config.ini 简单配置
config.php php方式的配置

配置文件说明:

;全局配置
[GearmanManager]
;指定服务器,可添加多个,用逗号分割
host=192.168.1.111:4730,192.168.1.222:4730
;worker文件存放目录,可添加多个,用逗号分割
worker_dir=/data/workers
;要加载的worker,默认所有
include=*
;运行所有worker进程数
count=10
;worker专用进程数,比如总数是10个,有10个worker,每个worker一个进程
dedicated_count=1
;worker最大有效期,单位秒
max_worker_lifetime=3600
;监控worker目录的代码更新,发现代码更新,则杀掉进程,重新加载代码。
auto_update=1
;超时时间
timeout = 300
;当然我们也可以对指定的某个worker进行配置
[sum]
;指定5个进程
dedicated_count=5
;5个进程都只做sum工作
dedicated_only=1

4、我们复制配置文件,并修改成如上所示,并保存

> mv etc/config-advanced.ini etc/GearmanManager.ini

5、运行GearmanManager

> cd /data/GearmanManager
> ./bin/pecl_manager.php -c /data/GearmanManager/etc/GearmanManager.ini -vvv

参数说明如下:

-P 管理进程pid文件所在目录,配置文件中通过pid_file来指定
-d 以守护进程形式运行
-u 指定守护进程的用户
-w 指定worker目录,当然配置文件里有配置,这里可以不用
-c 指定配置文件
-l 指定日志存放目录,如果没指定,则输出到标准输出stdout
-h 指定服务器,例如: 192.168.1.111:4730,192.168.1.222:4730
-v 只记录启动与关闭信息
-vv 进程的创建与退出信息
-vvv 关于worker信息和所做工作
-vvvv 调试信息
-vvvvv 所有信息

如果出现/usr/bin/env: php: 没有那个文件或目录,请把php可执行文件加入环境变量

> echo 'export PATH=/data/php56/bin:/data/php56/sbin:$PATH' >> /etc/profile
> source /etc/profile

gearman管理工具GearmanManager的安装与php使用方法示例

gearman管理工具GearmanManager的安装与php使用方法示例

希望本文所述对大家PHP程序设计有所帮助。

PHP 相关文章推荐
php下通过POST还是GET来传值
Jun 05 PHP
php中获取远程客户端的真实ip地址的方法
Aug 03 PHP
php htmlspecialchars()与shtmlspecialchars()函数的深入分析
Jun 05 PHP
PHP遍历某个目录下的所有文件和子文件夹的实现代码
Jun 28 PHP
php $_SERVER windows系统与linux系统下的区别说明
Feb 14 PHP
PHP APC缓存配置、使用详解
Mar 06 PHP
ThinkPHP页面跳转success与error方法概述
Jun 25 PHP
php二维数组合并及去重复的方法
Mar 04 PHP
Symfony学习十分钟入门经典教程
Feb 03 PHP
PHP链表操作简单示例
Oct 15 PHP
php安装扩展mysqli的实现步骤及报错解决办法
Sep 23 PHP
php 二维数组快速排序算法的实现代码
Oct 17 PHP
php使用gearman进行任务分发操作实例详解
Feb 26 #PHP
php实现根据身份证获取精准年龄
Feb 26 #PHP
ThinkPHP5与单元测试PHPUnit使用详解
Feb 23 #PHP
PHP实现创建一个RPC服务操作示例
Feb 23 #PHP
php 使用ActiveMQ发送消息,与处理消息操作示例
Feb 23 #PHP
php实现通过stomp协议连接ActiveMQ操作示例
Feb 23 #PHP
php ActiveMQ的安装与使用方法图文教程
Feb 23 #PHP
You might like
调试一段PHP程序时遇到的三个问题
2012/01/17 PHP
PHP利用str_replace防注入的方法
2013/11/10 PHP
PHP 正则表达式小结
2015/02/12 PHP
thinkPHP3.2简单实现文件上传的方法
2016/05/16 PHP
基于PHP的微信公众号的开发流程详解
2020/08/07 PHP
imagettftext() 失效,不起作用
2021/03/09 PHP
jquery之empty()与remove()区别说明
2010/09/10 Javascript
JavaScript 命名空间 使用介绍
2013/08/29 Javascript
javascript实现页面内关键词高亮显示代码
2014/04/03 Javascript
Nodejs从有门道无门菜鸟起飞必看教程
2016/07/20 NodeJs
vue2.0实现导航菜单切换效果
2017/05/08 Javascript
原生JS实现隐藏显示图片 JS实现点击切换图片效果
2021/01/27 Javascript
vue地区选择组件教程详解
2018/05/04 Javascript
vue路由事件beforeRouteLeave及组件内定时器的清除方法
2018/09/29 Javascript
JavaScript实现的鼠标跟随特效示例【2则实例】
2018/12/22 Javascript
微信小程序遍历Echarts图表实现多个饼图
2019/04/25 Javascript
微信小程序点击生成朋友圈分享图(遇到的坑)
2020/06/17 Javascript
python通过wxPython打开一个音频文件并播放的方法
2015/03/25 Python
Python实现运行其他程序的四种方式实例分析
2017/08/17 Python
python3使用flask编写注册post接口的方法
2018/12/28 Python
Python基于scipy实现信号滤波功能
2019/05/08 Python
Python实现的对一个数进行因式分解操作示例
2019/06/27 Python
Python文件操作模拟用户登陆代码实例
2020/06/09 Python
萨克斯第五大道英国:Saks Fifth Avenue英国
2019/04/01 全球购物
豪华复古化妆:Besame Cosmetics
2019/09/06 全球购物
美术指导求职信
2014/03/17 职场文书
初中新生军训方案
2014/05/13 职场文书
就职演讲稿范文
2014/05/19 职场文书
节水口号标语
2014/06/19 职场文书
有限公司股东合作协议书
2014/10/29 职场文书
《秋天的怀念》教学反思
2016/02/17 职场文书
详解CSS玩转图片Base64编码
2021/05/25 HTML / CSS
浅谈Python numpy创建空数组的问题
2021/05/25 Python
浅谈spring boot使用thymeleaf版本的问题
2021/08/04 Java/Android
企业开发CSS命名BEM代码规范实践
2022/02/12 HTML / CSS
vue-cil之axios的二次封装与proxy反向代理使用说明
2022/04/07 Vue.js