怎么在PHP中使用Beanstalkd消息隊列-創(chuàng)新互聯(lián)

本篇文章給大家分享的是有關(guān)怎么在PHP中使用Beanstalkd消息隊列,小編覺得挺實用的,因此分享給大家學(xué)習(xí),希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。

創(chuàng)新互聯(lián)堅持“要么做到,要么別承諾”的工作理念,服務(wù)領(lǐng)域包括:網(wǎng)站建設(shè)、成都做網(wǎng)站、企業(yè)官網(wǎng)、英文網(wǎng)站、手機端網(wǎng)站、網(wǎng)站推廣等服務(wù),滿足客戶于互聯(lián)網(wǎng)時代的安州網(wǎng)站設(shè)計、移動媒體設(shè)計的需求,幫助企業(yè)找到有效的互聯(lián)網(wǎng)解決方案。努力成為您成熟可靠的網(wǎng)絡(luò)建設(shè)合作伙伴!

一、Beanstalkd是什么?


Beanstalkd是一個高性能,輕量級的分布式內(nèi)存隊列

二、Beanstalkd特性

1、支持優(yōu)先級(支持任務(wù)插隊)
2、延遲(實現(xiàn)定時任務(wù))
3、持久化(定時把內(nèi)存中的數(shù)據(jù)刷到binlog日志)
4、預(yù)留(把任務(wù)設(shè)置成預(yù)留,消費者無法取出任務(wù),等某個合適時機再拿出來處理)
5、任務(wù)超時重發(fā)(消費者必須在指定時間內(nèi)處理任務(wù),如果沒有則認(rèn)為任務(wù)失敗,重新進(jìn)入隊列)

三、Beanstalkd核心元素

生產(chǎn)者 -> 管道(tube) -> 任務(wù)(job) -> 消費者

Beanstalkd可以創(chuàng)建多個管道,管道里面存了很多任務(wù),消費者從管道中取出任務(wù)進(jìn)行處理。

四、任務(wù)job狀態(tài)

delayed 延遲狀態(tài)
ready 準(zhǔn)備好狀態(tài)
reserved 消費者把任務(wù)讀出來,處理時
buried 預(yù)留狀態(tài)
delete 刪除狀態(tài)

怎么在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參數(shù)信息

> ./beanstalkd -h

啟動beanstalkd

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

-b表示開啟binlog,斷電后重啟自動恢復(fù)任務(wù)  

六、下載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當(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() 通過任務(wù)ID獲取任務(wù)

生產(chǎn)者方法

putInTube() 往管道中寫入數(shù)據(jù)
put() 配合useTube()使用

消費者方法

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

生產(chǎn)者producer.php代碼如下:

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

use Pheanstalk\Pheanstalk;

//創(chuàng)建一個Pheanstalk對象
$p = new Pheanstalk('192.168.1.222', 11300);

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

//向userReg管道中添加任務(wù),返回任務(wù)ID
//put()方法有四個參數(shù)
//第一個任務(wù)的數(shù)據(jù)
//第二個任務(wù)的優(yōu)先級,值越小,越先處理
//第三個任務(wù)的延遲
//第四個任務(wù)的ttr超時時間
$id = $p->useTube('userReg')->put(json_encode($data));
//獲取任務(wù)
$job = $p->peek($id);
//查看任務(wù)狀態(tài)
print_r($p->statsJob($job));

消費者consumer.php代碼如下:

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

use Pheanstalk\Pheanstalk;

//創(chuàng)建一個Pheanstalk對象
$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);

以上就是怎么在PHP中使用Beanstalkd消息隊列,小編相信有部分知識點可能是我們?nèi)粘9ぷ鲿姷交蛴玫降?。希望你能通過這篇文章學(xué)到更多知識。更多詳情敬請關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。

網(wǎng)站題目:怎么在PHP中使用Beanstalkd消息隊列-創(chuàng)新互聯(lián)
網(wǎng)頁鏈接:http://muchs.cn/article20/ddjico.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站營銷、響應(yīng)式網(wǎng)站、Google、面包屑導(dǎo)航品牌網(wǎng)站制作、域名注冊

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

商城網(wǎng)站建設(shè)