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 相关文章推荐
一个用mysql_odbc和php写的serach数据库程序
Oct 09 PHP
PHP实现多条件查询实例代码
Jul 17 PHP
一个PHP的QRcode类与大家分享
Nov 13 PHP
探讨PHP中OO之静态关键字以及类常量的详解
Jun 07 PHP
php安装xdebug/php安装pear/phpunit详解步骤(图)
Dec 22 PHP
PHP cURL初始化和执行方法入门级代码
May 28 PHP
PHP和Mysql中转UTF8编码问题汇总
Oct 10 PHP
关于PHP内置的字符串处理函数详解
Feb 04 PHP
PHP简单获取随机数的常用方法小结
Jun 07 PHP
微信公众号开发之获取位置信息php代码
Jun 13 PHP
PHP实现简单计算器小程序
Aug 28 PHP
PHP实现提高SESSION响应速度的几种方法详解
Aug 09 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
第十四节 命名空间 [14]
2006/10/09 PHP
PHP 根据IP地址控制访问的代码
2010/04/22 PHP
php之CodeIgniter学习笔记
2013/06/17 PHP
浅析Yii2 gridview实现批量删除教程
2016/04/22 PHP
php compact 通过变量创建数组
2016/11/15 PHP
PHP实现表单提交数据的验证处理功能【防SQL注入和XSS攻击等】
2017/07/21 PHP
JavaScript 组件之旅(一)分析和设计
2009/10/28 Javascript
jquery+json实现数据列表分页示例代码
2013/11/15 Javascript
javascript获取xml节点的最大值(实现代码)
2013/12/11 Javascript
使用简洁的jQuery方法实现隔行换色功能
2014/01/02 Javascript
javascript从image转换为base64位编码的String
2014/07/29 Javascript
JSON格式化输出
2014/11/10 Javascript
轻松创建nodejs服务器(7):阻塞操作的实现
2014/12/18 NodeJs
window.location.reload 刷新使用分析(去对话框)
2015/11/11 Javascript
快速获取/设置iframe内对象元素的几种js实现方法
2016/05/20 Javascript
轻松掌握JavaScript装饰者模式
2016/08/27 Javascript
利用Query+bootstrap和js两种方式实现日期选择器
2017/01/10 Javascript
jQuery实现简单的手风琴效果
2020/04/17 jQuery
vue mounted 调用两次的完美解决办法
2018/10/29 Javascript
JavaScript中的全局属性与方法深入解析
2020/06/14 Javascript
SpringBoot+Vue 前后端合并部署的配置方法
2020/12/30 Vue.js
Python下rrdtool模块的基本使用方法
2015/11/13 Python
Python作用域用法实例详解
2016/03/15 Python
python编程实现归并排序
2017/04/14 Python
pandas 读取各种格式文件的方法
2018/06/22 Python
python构建指数平滑预测模型示例
2019/11/21 Python
python 实现list或string按指定分段
2019/12/25 Python
Python基于pandas绘制散点图矩阵代码实例
2020/06/04 Python
利用Python优雅的登录校园网
2020/10/21 Python
新闻编辑自荐信
2013/11/03 职场文书
产品发布会策划方案
2014/05/12 职场文书
二年级上册数学教学计划
2015/01/20 职场文书
客服专员岗位职责
2015/02/10 职场文书
爱的教育观后感
2015/06/17 职场文书
社区干部培训心得体会
2016/01/06 职场文书
JavaScript实现一键复制内容剪贴板
2022/07/23 Javascript