1. 程式人生 > 程式設計 >PHP Beanstalkd訊息佇列的安裝與使用方法例項詳解

PHP Beanstalkd訊息佇列的安裝與使用方法例項詳解

本文例項講述了PHP Beanstalkd訊息佇列的安裝與使用方法。分享給大家供大家參考,具體如下:

一、Beanstalkd是什麼?

Beanstalkd是一個高效能,輕量級的分散式記憶體佇列

二、Beanstalkd特性

1、支援優先順序(支援任務插隊)
2、延遲(實現定時任務)
3、持久化(定時把記憶體中的資料刷到binlog日誌)
4、預留(把任務設定成預留,消費者無法取出任務,等某個合適時機再拿出來處理)
5、任務超時重發(消費者必須在指定時間內處理任務,如果沒有則認為任務失敗,重新進入佇列)

三、Beanstalkd核心元素

生產者 -> 管道(tube) -> 任務(job) -> 消費者

Beanstalkd可以建立多個管道,管道里面存了很多工,消費者從管道中取出任務進行處理。

四、任務job狀態

delayed 延遲狀態
ready 準備好狀態
reserved 消費者把任務讀出來,處理時
buried 預留狀態
delete 刪除狀態

PHP Beanstalkd訊息佇列的安裝與使用方法例項詳解

五、安裝Beanstalkd

http://kr.github.io/beanstalkd/download.html

下載beanstalkd-1.10.tar.gz

> tar -xf beanstalkd-1.10.tar.gz
> cd beanstalkd-1.10
> make

檢視beanstalkd引數資訊

> ./beanstalkd -h

啟動beanstalkd

> ./beanstalkd -l 127.0.0.1 -p 11300 -b /data/beanstalkd/binlog &

-b表示開啟binlog,斷電後重啟自動恢復任務  

六、下載Pheanstalk類

首先安裝composer

> curl -sS https://getcomposer.org/installer | php
> mv composer.phar /usr/local/bin/composer
> composer require pda/pheanstalk

編寫一個簡單指令碼檢視資訊

<?php
require './vendor/autoload.php';

use Pheanstalk\Pheanstalk;

$p = new Pheanstalk('127.0.0.1',11300);
//檢視beanstalkd當前的狀態資訊
var_dump($p->stats());

七、Pheanstalk使用方法

維護方法

stats() 檢視狀態方法
listTubes() 目前存在的管道
listTubesWatched() 目前監聽的管道
statsTube() 管道的狀態
useTube() 指定使用的管道
statsJob() 檢視任務的詳細資訊
peek() 通過任務ID獲取任務

生產者方法

putInTube() 往管道中寫入資料
put() 配合useTube()使用

消費者方法

watch() 監聽管道,可以同時監聽多個管道
ignore() 不監聽管道
reserve() 以阻塞方式監聽管道,獲取任務
reserveFromTube() 
release() 把任務重新放回管道
bury() 把任務預留
peekBuried() 把預留任務讀取出來
kickJob() 把buried狀態的任務設定成ready
kick() 批量把buried狀態的任務設定成ready
peekReady() 把準備好的任務讀取出來
peekDelayed() 把延遲的任務讀取出來
pauseTube() 給管道設定延遲
resumeTube() 取消管道延遲
touch() 讓任務重新計算ttr時間,給任務續命

生產者producer.php程式碼如下:

<?php
require './vendor/autoload.php';

use Pheanstalk\Pheanstalk;

//建立一個Pheanstalk物件
$p = new Pheanstalk('192.168.1.222',11300);

$data = array(
  'id' => 1,'name' => 'test',);

//向userReg管道中新增任務,返回任務ID
//put()方法有四個引數
//第一個任務的資料
//第二個任務的優先順序,值越小,越先處理
//第三個任務的延遲
//第四個任務的ttr超時時間
$id = $p->useTube('userReg')->put(json_encode($data));
//獲取任務
$job = $p->peek($id);
//檢視任務狀態
print_r($p->statsJob($job));

消費者consumer.php程式碼如下:

<?php
require './vendor/autoload.php';

use Pheanstalk\Pheanstalk;

//建立一個Pheanstalk物件
$p = new Pheanstalk('192.168.1.222',11300);

//監聽userReg管道,忽略default管道
$job = $p->watch('userReg')->ignore('default')->reserve();

$data = json_decode($job->getData());
//列印任務中的資料
print_r($data);

//最後刪除任務,表示任務處理完成
$p->delete($job);

更多關於PHP相關內容感興趣的讀者可檢視本站專題:《PHP程序與執行緒操作技巧總結》、《PHP網路程式設計技巧總結》、《PHP基本語法入門教程》、《PHP陣列(Array)操作技巧大全》、《php字串(string)用法總結》、《php+mysql資料庫操作入門教程》及《php常見資料庫操作技巧彙總》

希望本文所述對大家PHP程式設計有所幫助。