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 miniBB中文乱码问题解决方法
Nov 25 PHP
JS中encodeURIComponent函数用php解码的代码
Mar 01 PHP
PHP OPP机制和模式简介(抽象类、接口和契约式编程)
Jun 09 PHP
PHP连接sql server 2005环境配置及问题解决
Aug 08 PHP
php操作(删除,提取,增加)zip文件方法详解
Mar 12 PHP
浅谈Coreseek、Sphinx-for-chinaese、Sphinx+Scws的区别
Dec 15 PHP
php封装json通信接口详解及实例
Mar 07 PHP
PHP使用glob方法遍历文件夹下所有文件的实例
Oct 17 PHP
php版本CKEditor 4和CKFinder安装及配置方法图文教程
Jun 05 PHP
Laravel 框架返回状态拦截代码
Oct 18 PHP
PhpStorm 如何优雅的调试Hyperf的方法步骤
Nov 24 PHP
利用PHP内置SERVER开启web服务(本地开发使用)
Mar 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
Gregarius中文日期格式问题解决办法
2008/04/22 PHP
探讨PHP JSON中文乱码的解决方法详解
2013/06/06 PHP
一个PHP的远程图片抓取函数分享
2013/09/25 PHP
PHP中使用CURL获取页面title例子
2015/01/07 PHP
PHP连接数据库实现注册页面的增删改查操作
2016/03/27 PHP
详解php实现页面静态化原理
2017/06/21 PHP
PHP反射学习入门示例
2019/06/14 PHP
jQuery ajax BUG:object doesn't support this property or method
2010/07/06 Javascript
JavaScript中通过闭包解决只能取得包含函数中任何变量最后一个值的问题
2010/08/12 Javascript
父节点获取子节点的字符串示例代码
2014/02/26 Javascript
深入理解vue.js双向绑定的实现原理
2016/12/05 Javascript
vuejs开发组件分享之H5图片上传、压缩及拍照旋转的问题处理
2017/03/06 Javascript
原生js封装自定义滚动条
2017/03/24 Javascript
jQuery EasyUI Layout实现tabs标签的实例
2017/09/26 jQuery
JS+Canvas绘制动态时钟效果
2017/11/10 Javascript
十分钟带你快速了解React16新特性
2017/11/10 Javascript
彻底理解js面向对象之继承
2018/02/04 Javascript
JS实现图片轮播效果实例详解【可自动和手动】
2019/04/04 Javascript
如何利用Node.js与JSON搭建简单的动态服务器
2020/06/16 Javascript
Vue3.0的优化总结
2020/10/16 Javascript
JavaScript实现无限轮播效果
2020/11/19 Javascript
npm全局环境变量配置详解
2020/12/15 Javascript
js实现验证码干扰(动态)
2021/02/23 Javascript
对python sklearn one-hot编码详解
2018/07/10 Python
简单谈谈python基本数据类型
2018/09/26 Python
Python使用Beautiful Soup爬取豆瓣音乐排行榜过程解析
2019/08/15 Python
python-docx文件定位读取过程(尝试替换)
2020/02/13 Python
使用CSS3的appearance属性改变元素的外观的方法
2015/12/12 HTML / CSS
KIKO比利时官网:意大利彩妆品牌
2017/07/23 全球购物
护士自我鉴定怎么写
2014/02/07 职场文书
教育专业毕业生推荐信
2014/07/10 职场文书
后进生评语大全
2015/01/04 职场文书
优化经济发展环境工作总结
2015/08/11 职场文书
Oracle创建只读账号的详细步骤
2021/06/07 Oracle
SqlServer数据库远程连接案例教程
2021/07/15 SQL Server
python数字图像处理实现图像的形变与缩放
2022/06/28 Python