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 相关文章推荐
我的论坛源代码(九)
Oct 09 PHP
php flush类输出缓冲剖析
Oct 19 PHP
一步一步学习PHP(2)――PHP类型
Feb 15 PHP
基于PHP静态类的原罪详解
May 06 PHP
PHP JSON出错:Cannot use object of type stdClass as array解决方法
Aug 16 PHP
PHP面向对象精要总结
Nov 07 PHP
php 无限分类 树形数据格式化代码
Oct 11 PHP
PHP从二维数组得到N层分类树的实现代码
Oct 11 PHP
CakePHP框架Model关联对象用法分析
Aug 04 PHP
php之header的不同用法总结(实例讲解)
Nov 28 PHP
Laravel 使用查询构造器配合原生sql语句查询的例子
Oct 12 PHP
php 文件上传至OSS及删除远程阿里云OSS文件
Jul 04 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
在“咖啡之国”感受咖啡文化
2021/03/03 咖啡文化
PHP ajax 异步执行不等待执行结果的处理方法
2015/05/27 PHP
PHP如何将XML转成数组
2016/04/04 PHP
总结一些PHP中好用但又容易忽略的小知识
2017/06/02 PHP
基于jquery的实现简单的表格中增加或删除下一行
2010/08/01 Javascript
6款新颖的jQuery和CSS3进度条插件推荐
2013/03/05 Javascript
javascript中关于&amp;&amp; 和 || 表达式的小技巧分享
2015/04/10 Javascript
JavaScript中用于四舍五入的Math.round()方法讲解
2015/06/15 Javascript
详解JavaScript的Polymer框架中的通知交互
2015/07/29 Javascript
javascript实现文字无缝滚动
2016/12/27 Javascript
Bootstrap 手风琴菜单的实现代码
2017/01/20 Javascript
微信小程序实战之登录页面制作(5)
2020/03/30 Javascript
详谈js使用in和hasOwnProperty获取对象属性的区别
2017/04/25 Javascript
bootstrap模态框示例代码分享
2017/05/17 Javascript
AngularJS的ng-click传参的方法
2017/06/19 Javascript
jQuery实现的表格前端排序功能示例
2017/09/18 jQuery
通过fastclick源码分析彻底解决tap“点透”
2017/12/24 Javascript
浅谈vue3中effect与computed的亲密关系
2019/10/10 Javascript
Vue混入mixins滚动触底的方法
2019/11/22 Javascript
15个简单的JS编码标准让你的代码更整洁(小结)
2020/07/16 Javascript
Python中encode()方法的使用简介
2015/05/18 Python
python机器学习实战之树回归详解
2017/12/20 Python
Python FTP两个文件夹间的同步实例代码
2018/05/25 Python
Python 字符串与二进制串的相互转换示例
2018/07/23 Python
使用python生成杨辉三角形的示例代码
2018/08/29 Python
python实现视频分帧效果
2019/05/31 Python
PyCharm-错误-找不到指定文件python.exe的解决方法
2019/07/01 Python
python爬虫开发之Beautiful Soup模块从安装到详细使用方法与实例
2020/03/09 Python
利用Vscode进行Python开发环境配置的步骤
2020/06/22 Python
Python中bisect的用法及示例详解
2020/07/20 Python
详解css3自定义滚动条样式写法
2017/12/25 HTML / CSS
《两只鸟蛋》教学反思
2014/02/10 职场文书
团购业务员岗位职责
2014/03/15 职场文书
尊老爱亲美德少年事迹材料
2014/08/14 职场文书
个人作风建设心得体会
2014/10/22 职场文书
JAVA SpringMVC实现自定义拦截器
2022/03/16 Python