PHP Beanstalkd消息隊(duì)列的安裝與使用方法實(shí)例詳解
本文實(shí)例講述了PHP Beanstalkd消息隊(duì)列的安裝與使用方法。分享給大家供大家參考,具體如下:
一、Beanstalkd是什么?
Beanstalkd是一個(gè)高性能,輕量級(jí)的分布式內(nèi)存隊(duì)列
二、Beanstalkd特性
1、支持優(yōu)先級(jí)(支持任務(wù)插隊(duì))
2、延遲(實(shí)現(xiàn)定時(shí)任務(wù))
3、持久化(定時(shí)把內(nèi)存中的數(shù)據(jù)刷到binlog日志)
4、預(yù)留(把任務(wù)設(shè)置成預(yù)留,消費(fèi)者無(wú)法取出任務(wù),等某個(gè)合適時(shí)機(jī)再拿出來(lái)處理)
5、任務(wù)超時(shí)重發(fā)(消費(fèi)者必須在指定時(shí)間內(nèi)處理任務(wù),如果沒(méi)有則認(rèn)為任務(wù)失敗,重新進(jìn)入隊(duì)列)
三、Beanstalkd核心元素
生產(chǎn)者 -> 管道(tube) -> 任務(wù)(job) -> 消費(fèi)者
Beanstalkd可以創(chuàng)建多個(gè)管道,管道里面存了很多任務(wù),消費(fèi)者從管道中取出任務(wù)進(jìn)行處理。
四、任務(wù)job狀態(tài)
delayed 延遲狀態(tài)
ready 準(zhǔn)備好狀態(tài)
reserved 消費(fèi)者把任務(wù)讀出來(lái),處理時(shí)
buried 預(yù)留狀態(tài)
delete 刪除狀態(tài)

五、安裝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參數(shù)信息
> ./beanstalkd -h
啟動(dòng)beanstalkd
> ./beanstalkd -l 127.0.0.1 -p 11300 -b /data/beanstalkd/binlog &
-b表示開啟binlog,斷電后重啟自動(dòng)恢復(fù)任務(wù)
六、下載Pheanstalk類
首先安裝composer
> curl -sS https://getcomposer.org/installer | php > mv composer.phar /usr/local/bin/composer > composer require pda/pheanstalk
編寫一個(gè)簡(jiǎn)單腳本查看信息
<?php
require './vendor/autoload.php';
use Pheanstalk\Pheanstalk;
$p = new Pheanstalk('127.0.0.1', 11300);
//查看beanstalkd當(dāng)前的狀態(tài)信息
var_dump($p->stats());
七、Pheanstalk使用方法
維護(hù)方法
stats() 查看狀態(tài)方法 listTubes() 目前存在的管道 listTubesWatched() 目前監(jiān)聽的管道 statsTube() 管道的狀態(tài) useTube() 指定使用的管道 statsJob() 查看任務(wù)的詳細(xì)信息 peek() 通過(guò)任務(wù)ID獲取任務(wù)
生產(chǎn)者方法
putInTube() 往管道中寫入數(shù)據(jù) put() 配合useTube()使用
消費(fèi)者方法
watch() 監(jiān)聽管道,可以同時(shí)監(jiān)聽多個(gè)管道 ignore() 不監(jiān)聽管道 reserve() 以阻塞方式監(jiān)聽管道,獲取任務(wù) reserveFromTube() release() 把任務(wù)重新放回管道 bury() 把任務(wù)預(yù)留 peekBuried() 把預(yù)留任務(wù)讀取出來(lái) kickJob() 把buried狀態(tài)的任務(wù)設(shè)置成ready kick() 批量把buried狀態(tài)的任務(wù)設(shè)置成ready peekReady() 把準(zhǔn)備好的任務(wù)讀取出來(lái) peekDelayed() 把延遲的任務(wù)讀取出來(lái) pauseTube() 給管道設(shè)置延遲 resumeTube() 取消管道延遲 touch() 讓任務(wù)重新計(jì)算ttr時(shí)間,給任務(wù)續(xù)命
生產(chǎn)者producer.php代碼如下:
<?php
require './vendor/autoload.php';
use Pheanstalk\Pheanstalk;
//創(chuàng)建一個(gè)Pheanstalk對(duì)象
$p = new Pheanstalk('192.168.1.222', 11300);
$data = array(
'id' => 1,
'name' => 'test',
);
//向userReg管道中添加任務(wù),返回任務(wù)ID
//put()方法有四個(gè)參數(shù)
//第一個(gè)任務(wù)的數(shù)據(jù)
//第二個(gè)任務(wù)的優(yōu)先級(jí),值越小,越先處理
//第三個(gè)任務(wù)的延遲
//第四個(gè)任務(wù)的ttr超時(shí)時(shí)間
$id = $p->useTube('userReg')->put(json_encode($data));
//獲取任務(wù)
$job = $p->peek($id);
//查看任務(wù)狀態(tài)
print_r($p->statsJob($job));
消費(fèi)者consumer.php代碼如下:
<?php
require './vendor/autoload.php';
use Pheanstalk\Pheanstalk;
//創(chuàng)建一個(gè)Pheanstalk對(duì)象
$p = new Pheanstalk('192.168.1.222', 11300);
//監(jiān)聽userReg管道,忽略default管道
$job = $p->watch('userReg')->ignore('default')->reserve();
$data = json_decode($job->getData());
//打印任務(wù)中的數(shù)據(jù)
print_r($data);
//最后刪除任務(wù),表示任務(wù)處理完成
$p->delete($job);
更多關(guān)于PHP相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《PHP進(jìn)程與線程操作技巧總結(jié)》、《PHP網(wǎng)絡(luò)編程技巧總結(jié)》、《PHP基本語(yǔ)法入門教程》、《PHP數(shù)組(Array)操作技巧大全》、《php字符串(string)用法總結(jié)》、《php+mysql數(shù)據(jù)庫(kù)操作入門教程》及《php常見(jiàn)數(shù)據(jù)庫(kù)操作技巧匯總》
希望本文所述對(duì)大家PHP程序設(shè)計(jì)有所幫助。
- PHP實(shí)現(xiàn)異步延遲消息隊(duì)列的方法詳解
- PHP加MySQL消息隊(duì)列深入理解
- PHP高級(jí)編程之消息隊(duì)列原理與實(shí)現(xiàn)方法詳解
- PHP PDO和消息隊(duì)列的個(gè)人理解與應(yīng)用實(shí)例分析
- php+redis實(shí)現(xiàn)消息隊(duì)列功能示例
- PHP使用ActiveMQ實(shí)現(xiàn)消息隊(duì)列的方法詳解
- PHP消息隊(duì)列實(shí)現(xiàn)及應(yīng)用詳解【隊(duì)列處理訂單系統(tǒng)和配送系統(tǒng)】
- PHP多進(jìn)程通信-消息隊(duì)列使用
- php消息隊(duì)列實(shí)現(xiàn)詳解
相關(guān)文章
PHP微信開發(fā)之微信錄音臨時(shí)轉(zhuǎn)永久存儲(chǔ)
這篇文章主要為大家詳細(xì)介紹了PHP微信開發(fā)之微信錄音臨時(shí)轉(zhuǎn)永久存儲(chǔ),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-01-01
手把手教你打印出PDF(關(guān)于fpdf的簡(jiǎn)單應(yīng)用)
本篇文章是對(duì)關(guān)于fpdf的簡(jiǎn)單應(yīng)用進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-06-06
PHP Ajax實(shí)現(xiàn)無(wú)刷新附件上傳
這篇文章為大家詳細(xì)主要介紹了PHP Ajax實(shí)現(xiàn)無(wú)刷新附件上傳功能的具體代碼,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-08-08
PHP實(shí)現(xiàn)的各種進(jìn)制相互轉(zhuǎn)換功能小工具示例
這篇文章主要介紹了PHP實(shí)現(xiàn)的各種進(jìn)制相互轉(zhuǎn)換功能小工具,涉及php常見(jiàn)的二進(jìn)制、八進(jìn)制、十六進(jìn)制等相互轉(zhuǎn)換操作實(shí)現(xiàn)技巧,需要的朋友可以參考下2018-03-03
PHP進(jìn)階學(xué)習(xí)之Geo的地圖定位算法詳解
這篇文章主要介紹了PHP進(jìn)階學(xué)習(xí)之Geo的地圖定位算法,結(jié)合實(shí)例形式詳細(xì)分析了php Geo的地圖定位算法相關(guān)概念、原理、實(shí)現(xiàn)方法與操作注意事項(xiàng),需要的朋友可以參考下2019-06-06
php實(shí)現(xiàn)通用的信用卡驗(yàn)證類
這篇文章主要介紹了php實(shí)現(xiàn)通用的信用卡驗(yàn)證類,涉及信用卡的規(guī)則與php字符串操作的相關(guān)技巧,具有一定參考借鑒價(jià)值,文中有英文原文注釋說(shuō)明,有助于更直觀的了解源碼相關(guān)信息,需要的朋友可以參考下2015-03-03
PHP中防止SQL注入攻擊和XSS攻擊的兩個(gè)簡(jiǎn)單方法
所有有打印的語(yǔ)句如echo,print等 在打印前都要使用htmlentities() 進(jìn)行過(guò)濾,這樣可以防止Xss,注意中文要寫出htmlentities2010-04-04

