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 验证码实例代码
Jun 01 PHP
PHP数据类型的总结分析
Jun 13 PHP
PHP字符串的连接的简单实例
Dec 30 PHP
destoon数据库表说明汇总
Jul 15 PHP
推荐10个提供免费PHP脚本下载的网站
Dec 31 PHP
php析构函数的简单使用说明
Aug 24 PHP
微信支付PHP SDK ―― 公众号支付代码详解
Sep 13 PHP
thinkPHP5框架实现基于ajax的分页功能示例
Jun 12 PHP
Laravel框架基于ajax和layer.js实现无刷新删除功能示例
Jan 17 PHP
PHP SESSION机制的理解与实例
Mar 22 PHP
php实现的支付宝网页支付功能示例【基于TP5框架】
Sep 16 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
利用curl抓取远程页面内容的示例代码
2013/07/23 PHP
php获取json数据所有的节点路径
2015/05/17 PHP
UPUPW 更新 64 位 Apache 系列 PHP 7.0 正式版
2015/12/08 PHP
静态html文件执行php语句的方法(推荐)
2016/11/21 PHP
jQuery使用手册之三 CSS操作
2007/03/24 Javascript
js控制不同的时间段显示不同的css样式的实例代码
2013/11/04 Javascript
客户端js判断文件类型和文件大小即限制上传大小
2013/11/20 Javascript
JS实现兼容性好,自动置顶的淘宝悬浮工具栏效果
2015/09/18 Javascript
canvas实现探照灯效果
2017/02/07 Javascript
jquery实现图片轮播器
2017/05/23 jQuery
js模拟百度模糊搜索的实例
2017/08/04 Javascript
Vue 父子组件数据传递的四种方式( inheritAttrs + $attrs + $listeners)
2018/05/04 Javascript
微信小程序Page中data数据操作和函数调用方法
2019/05/08 Javascript
Vue+axios封装请求实现前后端分离
2020/10/23 Javascript
浅谈Ant Design Pro 菜单自定义 icon
2020/11/17 Javascript
[01:18:35]DOTA2-DPC中国联赛 正赛 Elephant vs LBZS BO3 第一场 1月29日
2021/03/11 DOTA
python ip正则式
2009/05/07 Python
用实例分析Python中method的参数传递过程
2015/04/02 Python
Python3实现Web网页图片下载
2016/01/28 Python
Python:Scrapy框架中Item Pipeline组件使用详解
2017/12/27 Python
Tensorflow 训练自己的数据集将数据直接导入到内存
2018/06/19 Python
python中计算一个列表中连续相同的元素个数方法
2018/06/29 Python
Python之NumPy(axis=0 与axis=1)区分详解
2019/05/27 Python
Python实现的远程文件自动打包并下载功能示例
2019/07/12 Python
python openCV获取人脸部分并存储功能
2019/08/28 Python
在python中求分布函数相关的包实例
2020/04/15 Python
numpy库reshape用法详解
2020/04/19 Python
css 省略号 css3让多余的字符串消失并附加省略号的实现代码
2013/02/07 HTML / CSS
瑞典网上购买现代和复古家具:Reforma
2019/10/21 全球购物
生物化工工艺专业应届生求职信
2013/10/08 职场文书
物流专业大学生的自我鉴定
2013/11/13 职场文书
创先争优制度
2014/01/21 职场文书
国庆节活动总结
2014/08/26 职场文书
学习十八大的心得体会
2014/09/01 职场文书
法定代表人身份证明书
2015/06/18 职场文书
Nginx利用Logrotate实现日志分割
2022/05/20 Servers