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 中检查或过滤IP地址的实现代码
Nov 27 PHP
基于php验证码函数的使用示例
May 03 PHP
使用php将某个目录下面的所有文件罗列出来的方法详解
Jun 21 PHP
ASP和PHP实现生成网站快捷方式并下载到桌面的方法
May 08 PHP
php+ajax导入大数据时产生的问题处理
Jun 11 PHP
jquery+php+ajax显示上传进度的多图片上传并生成缩略图代码
Oct 15 PHP
php带抄送和密件抄送的邮件发送方法
Mar 20 PHP
php正则匹配文章中的远程图片地址并下载图片至本地
Sep 29 PHP
crontab无法执行php的解决方法
Jan 25 PHP
PHP图片裁剪与缩放示例(无损裁剪图片)
Feb 08 PHP
PHP简单实现记录网站访问量功能示例
Jun 06 PHP
thinkphp5实现无限级分类
Feb 18 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获取文件名后缀
2013/06/09 PHP
支付宝接口开发集成支付环境小结
2015/03/17 PHP
以文件形式缓存php变量的方法
2015/06/26 PHP
php使用文本统计访问量的方法
2016/05/12 PHP
YII2框架中使用yii.js实现的post请求
2017/04/09 PHP
一个简单的js渐显(fadeIn)渐隐(fadeOut)类
2010/06/19 Javascript
javascript与CSS复习(《精通javascript》)
2010/06/29 Javascript
使用JS CSS去除IE链接虚线框的三种方法
2013/11/14 Javascript
JS 仿腾讯发表微博的效果代码
2013/12/25 Javascript
JS中三目运算符和if else的区别分析与示例
2014/11/21 Javascript
JavaScript中有关一个数组中最大值和最小值及它们的下表的输出的解决办法
2016/07/01 Javascript
socket.io学习教程之基本应用(二)
2017/04/29 Javascript
JS实现的DOM插入节点操作示例
2018/04/04 Javascript
基于Vue的延迟加载插件vue-view-lazy
2018/05/21 Javascript
vue实现div拖拽互换位置
2020/07/29 Javascript
微信小程序如何实现全局重新加载
2019/06/05 Javascript
微信小程序转化为uni-app项目的方法示例
2020/05/22 Javascript
[01:03:36]DOTA2-DPC中国联赛 正赛 VG vs Magma BO3 第二场 1月26日
2021/03/11 DOTA
[07:54]DOTA2-DPC中国联赛 正赛 iG vs VG 选手采访
2021/03/11 DOTA
用Python编写分析Python程序性能的工具的教程
2015/04/01 Python
python实现批量修改文件名代码
2017/09/10 Python
Python Flask 搭建微信小程序后台详解
2019/05/06 Python
Python合并2个字典成1个新字典的方法(9种)
2019/12/19 Python
keras 特征图可视化实例(中间层)
2020/01/24 Python
python3.7.3版本和django2.2.3版本是否可以兼容
2020/09/01 Python
Vichy薇姿加拿大官网:法国药妆,全球专业敏感肌护肤领先品牌
2018/07/11 全球购物
个人求职信范文分享
2013/12/13 职场文书
幼儿教师思想汇报
2014/01/10 职场文书
超市仓管员岗位职责
2014/04/07 职场文书
教师一帮一活动总结
2014/07/08 职场文书
村党支部群众路线教育实践活动对照检查材料
2014/09/26 职场文书
单位实习工作证明怎么写
2014/11/02 职场文书
教师调动申请报告
2015/05/18 职场文书
2016学校元旦晚会经典开场白台词
2015/12/03 职场文书
Python何绘制带有背景色块的折线图
2022/04/23 Python
td 内容自动换行 table表格td设置宽度后文字太多自动换行
2022/12/24 HTML / CSS