日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > linux >内容正文

linux

gearman服务连接php,linux中Gearman安装与使用,分布式消息队列(ubantu1.4-Gearman-php)...

發(fā)布時(shí)間:2024/3/26 linux 50 豆豆
生活随笔 收集整理的這篇文章主要介紹了 gearman服务连接php,linux中Gearman安装与使用,分布式消息队列(ubantu1.4-Gearman-php)... 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

[TOC]

# 1 Gearman簡介

## 1.1 概況

Gearman是一個(gè)用來把工作委派給其他機(jī)器、分布式的調(diào)用更適合做某項(xiàng)工作的機(jī)器、并發(fā)的做某項(xiàng)工作在多個(gè)調(diào)用間做負(fù)載均衡、或用來在調(diào)用其它語言的函數(shù)的系統(tǒng)。

## 1.2 組成

Gearman是一個(gè)分發(fā)任務(wù)的程序架構(gòu),由三部分組成:

* Gearman client:提供gearman client API給應(yīng)用程序調(diào)用。API可以使用C,PHP,PERL,MYSQL UDF等待呢個(gè)語言,它是請(qǐng)求的發(fā)起者。

* Gearman job server:將客戶端的請(qǐng)求分發(fā)到各個(gè)gearman worker的調(diào)度者,相當(dāng)于中央控制器,但它不處理具體業(yè)務(wù)邏輯。

* Gearman worker:提供gearman worker API給應(yīng)用程序調(diào)用,具體負(fù)責(zé)客戶端的請(qǐng)求,并將處理結(jié)果返回給客戶端。

## 1.3 應(yīng)用

Mogilefs的分布式文件系統(tǒng)的核心就是用gearman實(shí)現(xiàn)的。

* 這個(gè)軟件的應(yīng)用場景很多,比如視頻網(wǎng)站的視頻處理,分布式日志處理,電子郵件處理,文件同步處理,圖片處理等等,只要是可以放開,不影響體驗(yàn)和響應(yīng)的場 景,需要并行進(jìn)行大量計(jì)算和處理的程序都是可以的。Yahoo在60或更多的服務(wù)器上使用gearman每天處理600萬個(gè)作業(yè)。新聞聚合器digg構(gòu)建 了一個(gè)相同規(guī)模的gearman網(wǎng)絡(luò),每天可處理400000個(gè)作業(yè)。

* Gearman不但可以做為任務(wù)分發(fā),還可以做為應(yīng)用方面的負(fù)載均衡??梢宰寃orker放在不同的一堆服務(wù)器上,也可以啟動(dòng)放在同一個(gè)cpu的多個(gè)核 上。比如,應(yīng)用視頻轉(zhuǎn)換程序,不希望web服務(wù)器來處理視頻格式轉(zhuǎn)換,這時(shí),可以在這一堆服務(wù)器上進(jìn)行任務(wù)分發(fā),在上面加載worker處理視頻格式,對(duì) 外的web服務(wù)器就不會(huì)被視頻轉(zhuǎn)換過程影響。而且擴(kuò)展方便,加一臺(tái)服務(wù)器到任務(wù)調(diào)度中心,注冊(cè)成worker即可,這時(shí)job server會(huì)在請(qǐng)求到來的時(shí)候,將請(qǐng)求發(fā)送給空閑的worker。還可以運(yùn)行多個(gè)job server,組成ha架構(gòu),如果一個(gè)job server當(dāng)?shù)袅?#xff0c;client和worker會(huì)自動(dòng)遷移到另一臺(tái)job server上。

1.4 工作原理圖

![](https://box.kancloud.cn/71a0489ae48c6002ca8f92d3f043d288_479x302.png)

2 運(yùn)行過程

`一個(gè)Gearman請(qǐng)求的處理過程涉及三個(gè)角色:Client -> Job -> Worker。`

* Client:請(qǐng)求的發(fā)起者,可以是 C,PHP,Perl,MySQL UDF 等等。

* Job:請(qǐng)求的調(diào)度者,用來負(fù)責(zé)協(xié)調(diào)把 Client 發(fā)出的請(qǐng)求轉(zhuǎn)發(fā)給合適的 Work。

* Worker:請(qǐng)求的處理者,可以是 C,PHP,Perl 等等。

`因?yàn)?Client,Worker 并不限制用一樣的語言,所以有利于多語言多系統(tǒng)之間的集成。`

`甚至我們通過增加更多的 Worker,可以很方便的實(shí)現(xiàn)應(yīng)用程序的分布式負(fù)載均衡架構(gòu)。`

# 3 Gearman下載

1)官網(wǎng)

http://gearman.org/

2)官網(wǎng)下載

https://launchpad.net/gearmand

3)官網(wǎng)使用向?qū)?/p>

http://gearman.org/getting-started/

4)gearman服務(wù)

https://github.com/gearman/gearmand/releases

5)gearman-php擴(kuò)展

https://github.com/wcgallego/pecl-gearman/releases

# 4 Gearman安裝

```

//更新下載列表

apt-get update

//安裝服務(wù)

apt-get install gearman-server

apt-get install gearman-job-server

apt-get install gearman-tools

//查看進(jìn)程 是否安裝成功

ps -aux | grep gearman

gearman 10896 0.0 0.6 68684 6448 ? Ssl Mar06 0:06 /usr/sbin/gearmand --log-file=/var/log/gearman-job-server/gearman.log

root 22920 0.0 0.2 4692 2072 pts/3 S+ 10:23 0:00 grep --color=auto gear

//查看監(jiān)聽端口

# netstat -anp | grep 4730

```

## 4.1 詳細(xì)參數(shù)

-b,--backlog= 儲(chǔ)備的監(jiān)聽連接數(shù)量

-d, --daemon 后臺(tái)運(yùn)行

-f, --file-descriptors= 文件描述符的數(shù)量

-h, --help 幫助

-j, --job-retries= 在ob server移除不可用job之前運(yùn)行的次數(shù),防止不斷運(yùn)行導(dǎo)致其他可用worker崩潰。默認(rèn)沒有限制

-l, -log-file= 日志文件存放位置(默認(rèn)記錄最簡單日志)

-L, --listen= 監(jiān)聽的IP,默認(rèn)全部接受

-p, --port= 指定監(jiān)聽端口

-P, --pid-file= 指定進(jìn)程ID寫入位置

-r, --protocol= 加載協(xié)議模塊

-q, --queue-type= 指定持久化隊(duì)列

-t, --threads= 使用的I/9線程數(shù)量。默認(rèn)為0

-u, --user= 啟動(dòng)后,切換到指定用戶

-V, --version 顯示版本信息

## 5 Gearadmin 管理

```

輸入以下命令,查看4730端口情況。

(echo "status" ; sleep 2 ) | telnet 192.168.142.130 4730

或者輸入以下命令查看gearman運(yùn)行情況

# gearadmin --status

email002

emailtemplate001

```

* 字段說明:"已知注冊(cè)的任務(wù)" "正在運(yùn)行的任務(wù)" "隊(duì)列中的任務(wù)" "可用的 Worker".

* emailtemplate 0 0 1,注冊(cè)的任務(wù)名為 emailtemplate,0 個(gè)正常在運(yùn)行,隊(duì)列為空,有一個(gè)可用的 Worker.

## 5.1 常用參數(shù)

* --status 查看 Status for the server.

* --workers 查看 Workers for the server.

* --shutdown 關(guān)閉服務(wù)器。

# 6 Gearman使用

## 6.1 Gearmanjob

```php

/**

* @param array $argv 傳入worker名稱

* 或者 $_SERVER['argv']

*

*/

$channel = !empty($argv[1]) ? $argv[1] : 'email';

$worker = new GearmanWorker();

$worker->addServer('192.168.142.130', '4730');

//參數(shù)1:worker在Gearadmin管理中顯示的名稱,參數(shù)2回調(diào)方法

$worker->addFunction($channel,array(new GearmanWorkerDeal($channel),'invoke'));

while($worker->work());

```

## 6.2 GearmanWorker

```php

class GearmanWorkerDeal{

public $channel;

public static $dealResult = false;

public function __construct($channel = 'email') {

$this->channel = $channel;

}

/**

* @param GearmanJob $job

*/

public function invoke(GearmanJob $job) {

$ret = $job->workload();

$ret = unserialize($ret);

$func = $this->channel.'Invoke';

if(!empty($ret) && method_exists(new GearmanWorkerDeal($this->channel),$func)) {

//業(yè)務(wù)處理

$this->$func($ret);

}

}

public function emailInvoke($data = []){

$vars = [

'to'=>[$data['email']],

'sub'=>[

'%userName%'=>[$data['userName']],

'%subject%'=>[''],

'%content%'=>[$data['content']],

'%emailIconClass%' => [$data['type']],

],

];

$params = array(

'api_user'=>'api_user',

'api_key'=>'api_key',

'template_invoke_name' => '模版名稱',

'subject' => '標(biāo)題',

'from' => '發(fā)件人郵箱',

'fromname' => '發(fā)件人姓名',

'substitution_vars'=>json_encode($vars),

);

$ret = self::requestApi($params);

}

//請(qǐng)求接口發(fā)送

public static function requestApi($params = []) {

$ch = curl_init();

curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);

curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);

curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');

curl_setopt($ch, CURLOPT_URL, 'https://sendcloud.sohu.com/webapi/mail.send_template.json');

//不同于登錄SendCloud站點(diǎn)的帳號(hào),您需要登錄后臺(tái)創(chuàng)建發(fā)信子帳號(hào),使用子帳號(hào)和密碼才可以進(jìn)行郵件的發(fā)送。

curl_setopt($ch, CURLOPT_POSTFIELDS,$params);

$result = curl_exec($ch);

//請(qǐng)求失敗

if($result === false) {

echo 'last error : ' . curl_error($ch);

}

curl_close($ch);

return $result;

}

}

```

## 6.3 啟動(dòng)Job端

啟動(dòng)job端 任務(wù)服務(wù)器,讓該命令在后臺(tái)執(zhí)行,并把輸出重定向到email_error.log文件。

`nohup /usr/bin/php /data/Gearmanjob.php email > /data/email_error.log 2>&1 &`

>[info]

> nohup:不掛斷地運(yùn)行命令

> &:在后臺(tái)運(yùn)行

> 2>&1:是將標(biāo)準(zhǔn)出錯(cuò)重定向到標(biāo)準(zhǔn)輸出,這里的標(biāo)準(zhǔn)輸出已經(jīng)重定向到了email_error.log文件,即將標(biāo)準(zhǔn)出錯(cuò)也輸出到email_error.log文件中

## 6.4 創(chuàng)建Client

```php

$client = new GearmanClient();

$client->addServer('192.168.142.130', '4730');

$data = [

'email' => '',

'userName' => '',

'content' => '',

'type' => ''

]

//參數(shù)1:Worker的名稱,參數(shù)2:序列化后的參數(shù)

$ret = $client->doBackground('emial', serialize($data));

echo $ret."\r\n";

```

# 7 使用注意

* 在調(diào)試或者更新Worker代碼后,一定要重啟進(jìn)程。

* 命令行下執(zhí)行帶參數(shù)php,并取得參數(shù):

* 可使用 $argv 或者 $_SERVER['argv'] 或者 getopt('a:b:')

* 測試文件

```php

print_r($argv);

echo "\n";

echo $argc;

echo "\n";

?>

```

* 命令行下調(diào)用

```

$ php test.php aaa ccc bbbb

Array

(

[0] => test.php //參數(shù)0,文件本身

[1] => aaa //參數(shù)1

[2] => ccc //參數(shù)2

[3] => bbbb //參數(shù)3

)

4 //$argc的值,參數(shù)的總數(shù)

```

總結(jié)

以上是生活随笔為你收集整理的gearman服务连接php,linux中Gearman安装与使用,分布式消息队列(ubantu1.4-Gearman-php)...的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。