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 array_merge下进行数组合并的代码
Jul 22 PHP
PHP 读取文件的正确方法
Apr 29 PHP
分享一个PHP数据流应用的简单例子
Jun 01 PHP
探讨PHP删除文件夹的三种方法
Jun 09 PHP
php的zip解压缩类pclzip使用示例
Mar 14 PHP
PHP面试题之文件目录操作
Oct 15 PHP
php表单提交实例讲解
Nov 12 PHP
合格的PHP程序员必备技能
Nov 13 PHP
UPUPW 更新 64 位 Apache 系列 PHP 7.0 正式版
Dec 08 PHP
学习php设计模式 php实现观察者模式(Observer)
Dec 09 PHP
PHP+MySql实现一个简单的留言板
Jul 19 PHP
php随机生成验证码,php随机生成数字,php随机生成数字加字母!
Apr 01 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之Smarty入门
2007/01/04 PHP
PHP使用GIFEncoder类生成gif动态滚动字幕
2014/07/01 PHP
ThinkPHP登录功能的实现方法
2014/08/20 PHP
详解PHP 二维数组排序保持键名不变
2019/03/06 PHP
jquery 操作表格实现代码(多种操作打包)
2011/03/20 Javascript
JavaScript立即执行函数的三种不同写法
2014/09/05 Javascript
JavaScript window.location对象
2014/11/14 Javascript
javascript几个易错点记录
2014/11/26 Javascript
node.js中的fs.truncate方法使用说明
2014/12/15 Javascript
网站发布后Bootstrap框架引用woff字体无法正常显示的解决方法
2016/11/24 Javascript
jquery 判断div show的状态实例
2016/12/03 Javascript
详解RequireJS按需加载样式文件
2017/04/12 Javascript
详解vue组件基础
2018/05/04 Javascript
详解angular分页插件tm.pagination二次触发问题解决方案
2018/07/20 Javascript
react native 获取地理位置的方法示例
2018/08/28 Javascript
在vue中v-bind使用三目运算符绑定class的实例
2018/09/29 Javascript
JS实现的图片选择顺序切换和循环切换功能示例【测试可用】
2018/12/28 Javascript
vue子传父关于.sync与$emit的实现
2019/11/05 Javascript
使用vue-cli4.0快速搭建一个项目的方法步骤
2019/12/04 Javascript
9种方法优化jQuery代码详解
2020/02/04 jQuery
在Python中操作字典之clear()方法的使用
2015/05/21 Python
Python数据报表之Excel操作模块用法分析
2019/03/11 Python
Python+Selenium使用Page Object实现页面自动化测试
2019/07/14 Python
Python人工智能之路 之PyAudio 实现录音 自动化交互实现问答
2019/08/13 Python
基于Python获取城市近7天天气预报
2019/11/26 Python
解决Python 写文件报错TypeError的问题
2020/10/23 Python
HTML5 通过Vedio标签实现视频循环播放的示例代码
2020/08/05 HTML / CSS
英国奢侈品概念店:Base Blu
2019/05/16 全球购物
初一地理教学反思
2014/01/16 职场文书
三八红旗手先进事迹材料
2014/05/13 职场文书
捐资助学感谢信
2015/01/21 职场文书
毕业生爱心捐书倡议书
2015/04/27 职场文书
何玥事迹观后感
2015/06/16 职场文书
汽车修理厂管理制度
2015/08/05 职场文书
党风廉政教育心得体会2016
2016/01/22 职场文书
pytorch--之halfTensor的使用详解
2021/05/24 Python