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 相关文章推荐
不用数据库的多用户文件自由上传投票系统(1)
Oct 09 PHP
mongo Table类文件 获取MongoCursor(游标)的实现方法分析
Jul 01 PHP
php字符串按照单词进行反转的方法
Mar 14 PHP
PHP生成静态HTML页面最简单方法示例
Apr 09 PHP
在CentOS上搭建LAMP+vsftpd环境的简单指南
Aug 01 PHP
学习php设计模式 php实现访问者模式(Visitor)
Dec 07 PHP
yii2中结合gridview如何使用modal弹窗实例代码详解
Jun 12 PHP
php字符集转换
Jan 23 PHP
基于ThinkPHP5.0实现图片上传插件
Sep 25 PHP
PHP封装的非对称加密RSA算法示例
May 28 PHP
php进程daemon化的正确实现方法
Sep 06 PHP
Laravel框架Blade模板简介及模板继承用法分析
Dec 03 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分页函数代码(简单实用型)
2010/12/02 PHP
php简单开启gzip压缩方法(zlib.output_compression)
2013/04/13 PHP
php实现过滤字符串中的中文和数字实例
2015/07/29 PHP
fix-ie5.js扩展在IE5下不能使用的几个方法
2007/08/20 Javascript
解决AJAX中跨域访问出现'没有权限'的错误
2008/08/20 Javascript
Javascript 模式实例 观察者模式
2009/10/24 Javascript
javascript获取元素CSS样式代码示例
2013/11/28 Javascript
parentElement,srcElement的使用小结
2014/01/13 Javascript
jquery实现的随机多彩tag标签随机颜色和字号大小效果
2014/03/27 Javascript
Javascript表单验证要注意的事项
2014/09/29 Javascript
Javascript数据结构与算法之列表详解
2015/03/12 Javascript
浅谈window.onbeforeunload() 事件调用ajax
2016/06/29 Javascript
浅谈Node.js:fs文件系统模块
2016/12/08 Javascript
原生js实现下拉框功能(支持键盘事件)
2017/01/13 Javascript
vue-router 学习快速入门
2017/03/01 Javascript
jquery ztree实现右键收藏功能
2017/11/20 jQuery
Vue多种方法实现表头和首列固定的示例代码
2018/02/02 Javascript
ant design vue嵌套表格及表格内部编辑的用法说明
2020/10/28 Javascript
原生js实现自定义消息提示框
2020/11/19 Javascript
在Python中操作时间之strptime()方法的使用
2020/12/30 Python
python数据预处理之数据标准化的几种处理方式
2019/07/17 Python
python判断单向链表是否包括环,若包含则计算环入口的节点实例分析
2019/10/23 Python
python爬虫开发之使用python爬虫库requests,urllib与今日头条搜索功能爬取搜索内容实例
2020/03/10 Python
Elasticsearch py客户端库安装及使用方法解析
2020/09/14 Python
浅析python实现动态规划背包问题
2020/12/31 Python
CSS3制作皮卡丘动画壁纸的示例
2020/11/02 HTML / CSS
HTML5调用手机摄像头拍照的实现思路及代码
2014/06/15 HTML / CSS
调用HTML5的Canvas API绘制图形的快速入门指南
2016/06/17 HTML / CSS
Html5自定义字体解决方法
2019/10/09 HTML / CSS
马来西亚在线健康商店:Medipal Malaysia
2020/04/13 全球购物
现金会计岗位职责
2013/12/05 职场文书
公务员综合考察材料
2014/02/01 职场文书
儿子满月酒致辞
2015/07/29 职场文书
高二化学教学反思
2016/02/22 职场文书
vue-element-admin项目导入和导出的实现
2021/05/21 Vue.js
python实现会员信息管理系统(List)
2022/03/18 Python