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 获取一个月第一天与最后一天的代码
May 16 PHP
php合并数组中相同元素的方法
Nov 13 PHP
php实现对两个数组进行减法操作的方法
Apr 17 PHP
php编写的抽奖程序中奖概率算法
May 14 PHP
通过PHP自带的服务器来查看正则匹配结果的方法
Dec 24 PHP
PHP递归获取目录内所有文件的实现方法
Nov 01 PHP
PHP 类与构造函数解析
Feb 06 PHP
PHP设置Cookie的HTTPONLY属性方法
Feb 09 PHP
PHP经典实用正则表达式小结
May 04 PHP
php封装一个异常的处理类
Jun 08 PHP
PHP __call()方法实现委托示例
May 20 PHP
PHP使用redis位图bitMap 实现签到功能
Oct 08 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
解决GD中文乱码问题
2007/02/14 PHP
php ajax异步读取rss文档数据
2016/03/29 PHP
php写一个函数,实现扫描并打印出自定目录下(含子目录)所有jpg文件名
2017/05/26 PHP
Laravel框架实现定时发布任务的方法
2018/08/16 PHP
php下的原生ajax请求用法实例分析
2020/02/28 PHP
基于jquery的高性能td和input切换并可修改内容实现代码
2011/01/09 Javascript
javascript陷阱 一不小心你就中招了(字符运算)
2013/11/10 Javascript
文本框只能输入数字的实现方法(兼容IE火狐)
2016/06/25 Javascript
jQuery基本选择器之标签名选择器
2016/09/03 Javascript
AngularJS入门教程之表单校验用法示例
2016/11/02 Javascript
jquery获取table指定行和列的数据方法(当前选中行、列)
2016/11/07 Javascript
Vue数据驱动模拟实现1
2017/01/11 Javascript
小程序点餐界面添加购物车左右摆动动画
2020/09/23 Javascript
nuxt.js添加环境变量,区分项目打包环境操作
2020/11/06 Javascript
python使用wmi模块获取windows下硬盘信息的方法
2015/05/15 Python
Python中的深拷贝和浅拷贝详解
2015/06/03 Python
python实现分页效果
2017/10/25 Python
Python简单生成随机姓名的方法示例
2017/12/27 Python
python3 面向对象__类的内置属性与方法的实例代码
2018/11/09 Python
Python中GeoJson和bokeh-1的使用讲解
2019/01/03 Python
Python中三元表达式的几种写法介绍
2019/03/04 Python
Python中最大递归深度值的探讨
2019/03/05 Python
python 字典的打印实现
2019/09/26 Python
python多环境切换及pyenv使用过程详解
2019/09/27 Python
python 解决flask 图片在线浏览或者直接下载的问题
2020/01/09 Python
Python图像处理库PIL中图像格式转换的实现
2020/02/26 Python
Django 用户登陆访问限制实例 @login_required
2020/05/13 Python
基于python SMTP实现自动发送邮件教程解析
2020/06/02 Python
利用python中的matplotlib打印混淆矩阵实例
2020/06/16 Python
Python字符串格式化常用手段及注意事项
2020/06/17 Python
浅析两列自适应布局的3种思路
2016/05/03 HTML / CSS
英语感恩演讲稿
2014/01/14 职场文书
村官工作鉴定评语
2014/01/27 职场文书
业务员的岗位职责
2014/03/15 职场文书
2016春季校长开学典礼致辞
2015/11/26 职场文书
JS数组去重详情
2021/11/07 Javascript