Gearman 安装使用教程

Gearman是一个分发任务的程序框架,可以用在各种场合,Gearman更偏向于任务分发功能。它的任务分布非常简单,简单得可以只需要用脚本即可完成。

Gearman 分布式任务实现原理上只用到2个字段,function name 和 data。function name即任务名称,由client传给job server,

job server根据function name选择合适的worker节点来执行。data通常为执行任务所需的自定义的内容,比如简单的做法可以把需要执行的脚本当成data即可(当然要注 意其中的安全防范)。

如果有多个worker可以处理同一个function name, 则job server会自动分配一个。当用于远程监控场景时,我们可以让每个worker注册成不同的业务名称,以达到方便控制每台worker节点的目的。

gearman

#安装运行依赖
yum install -y boost boost-devel libevent libevent-devel gperf libuuid libuuid-devel

#下载最新版 Gearman
wget --no-check-certificate https://launchpad.net/gearmand/1.2/1.1.12/+download/gearmand-1.1.12.tar.gz
./configure
make && make install

mkdir -p /usr/local/var/log             # 创建日志目录,否则无法启动服务# 安装PHP扩展支持
wget http://pecl.php.net/get/gearman-1.1.2.tgz        #下载PHP扩展
tar zxf gearman-1.1.2.tgz
cd gearman-1.1.2
phpize
./configure --with-php-config=/usr/local/php/bin/php-config
make && make install

#修改php.ini配置文件,新增以下内容
extension=gearman.so

service php-fpm restart            # 重启服务
在centos下,一般文档介绍使用 gearmand -d 启动。有时可能有问题,这时可以使用命令
gearmand --log-file gearmand.log --listen 192.168.97.12 --port=4730 -d 


# -------------------- client.php 文件内容 ---------------------- #
<?php
$client= new GearmanClient();
$client->addServer('127.0.0.1', 4730);

for ($i=0; $i<15; $i++) {
    $data = array(
        'time'  => date('Y-m-d H:i:s'),
        'idx'   => $i );
    $dataString = serialize($data);
    $client->doBackground('jobName', $dataString);
}


# -------------------- worker.php 文件内容 ---------------------- #
<?php
$worker = new GearmanWorker();
$worker->addServer('127.0.0.1', 4730);
$worker->addFunction('jobName', 'my_task');

while ($worker->work()){
    if ($worker->returnCode() != GEARMAN_SUCCESS) {
        echo 'Something Wrong :'.$worker->returnCode();     //Gearman 状态错误 需要做日志或异常处理
    }
}

function my_task($job) {
    $dataString = $job->workload();
    $data = unserialize($dataString);
    echo var_export($data, true).PHP_EOL;
    sleep(3);
}

posted @ 2016-08-28 21:05  Funsion Wu  Views(743)  Comments(0Edit  收藏  举报