Gearman 安裝使用教程

Gearman是一個分發任務的程序框架,能夠用在各類場合,Gearman更偏向於任務分發功能。它的任務分佈很是簡單,簡單得能夠只須要用腳本便可完成。php

Gearman 分佈式任務實現原理上只用到2個字段,function name 和 data。function name即任務名稱,由client傳給job server,centos

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);
}

相關文章
相關標籤/搜索