zoukankan      html  css  js  c++  java
  • 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);
    }

  • 相关阅读:
    经典SQL语句大全
    MySQL数据库InnoDB存储引擎多版本控制(MVCC)实现原理分析
    Compilify——让你在浏览器中编译.NET代码
    Apache CouchDB 1.2.0新特性
    word转chm格式文档非常好用的转换工具
    ReSharper 6 Beta发布,商业.NET开发工具
    HTML.Next会给我们带来什么?
    在并行方法体中谨慎使用锁
    7款仿照Sinatra思路的.NET框架
    数据库工件的配置管理
  • 原文地址:https://www.cnblogs.com/funsion/p/5815967.html
Copyright © 2011-2022 走看看