Gearman 是什么?php
Gearman是一个用来把工做委派给其余机器、分布式的调用更适合作某项工做的机器、并发的作某项工做在多个调用间作负载均衡、或用来在调用其它语言的函数的系统。git
Gearman 工做原理github
Web 中经常使用的场景。服务器
这篇文章主要讲解 系统报警 场景并发
在开发系统的过程当中,每每程序会出现这样,那样的问题。负载均衡
咱们要第一时间获取错误问题,通知短信,邮件通知给相关人员。异步
由于,短信、邮件的发送比较耗时,并发量大的状况下,会出现延时现象。分布式
因此,使用 Gearman 实现短信,邮件的异步发送。函数
Gearman 安装的两种方式ui
方式一:官网推荐安装方法
yum install gearmand复制代码
方式二:自定义安装
wget get https://github.com/libevent/libevent/releases/download/release-2.0.22-stable/libevent-2.0.22-stable.tar.gz
tar zxvf libevent-2.0.22-stable.tar.gz
./configure --prefix=/usr
make && make install复制代码
wget get https://launchpad.net/gearmand/1.2/1.1.12/+download/gearmand-1.1.12.tar.gz
tar zxvf gearmand-1.1.12.tar.gz
cd gearmand-1.1.12
./configure
若是报错:configure: error: could not find boost
yum install -y boost boost-devel
若是报错:configure: error: could not find gperf
yum install gperf
若是报错:configure: error: Unable to find libuuid
yum install libuuid-devel
make && make install
安装成功后,执行 gearmand -V 查询版本号。
gearmand -d 开启服务。
舒适提示:
仅供参考,遇到不可预测的问题,请进行Google。复制代码
wget get http://pecl.php.net/get/gearman-1.1.2.tgz
tar zxvf gearman-1.1.2.tgz
cd gearman-1.1.2
/usr/local/php/bin/phpize
./configure --with-php-config=/usr/local/php/bin/php-config --with-gearman
若是报错:configure: error: Please install libgearman
yum install -y libgearman-devel.x86_64复制代码
案例(系统报警)
gearmand -d复制代码
php worker.php复制代码
addServer("127.0.0.1", 4730);
$client->doNormal("send_mail", $strEmailInfo);
if ($is_fatal_error == 1) {
$client->doNormal("send_sms", $strSmsInfo);
}
}
/**
* 捕捉致命错误
* @return string
*/
function fatalErrorHandler() {
$e = error_get_last();
switch ($e['type']) {
case 1:
errorHandler($e['type'], $e['message'], $e['file'], $e['line'], 1);
break;
}
}复制代码
addServer("127.0.0.1", 4730);
$worker->addFunction("send_mail", "doSendMail");
$worker->addFunction("send_sms", "doSendSms");
while ($worker->work());
/**
* 执行发送邮件的Job
* @param $job
* @return string
*/
function doSendMail($job)
{
$strEmailInfo = $job->workload();
/**
* 在这个方法里完善发送邮件的操做
* ......
* Demo是把信息写入到文件中
*/
return file_put_contents("gearman.txt", $strEmailInfo."\n", FILE_APPEND);
}
/**
* 执行发送短信的Job
* @param $job
* @return string
*/
function doSendSms($job)
{
$strSmsInfo = $job->workload();
/**
* 在这个方法里完善发送短信的操做
* ......
* Demo是把信息写入到文件中
*/
return file_put_contents("gearman.txt", $strSmsInfo."\n", FILE_APPEND);
}复制代码
【警告错误】
时间:2016-09-22 23:15:10
错误代码:8
错误信息:Undefined variable: b
错误文件:/home/www/mi/gearman/client.php
错误行号:9
【致命错误】
时间:2016-09-22 23:15:10
错误代码:1
错误信息:Class 'Test' not found
错误文件:/home/www/mi/gearman/client.php
错误行号:12
[致命错误]错误代码:1,错误信息:Class 'Test' not found,错误文件:/home/www/mi/gearman/client.php复制代码
舒适提示
Thanks ~