安裝
yum instll -y beanstalkd
php中如何使用呢
pheanstalk
安裝了composer(可以使用yum進行安裝)之後,如果你的服務器所在的網絡環境在國內的話還是需要配置國的的composer源。
composer config -g repo.packagist composer https://packagist.phpcomposer.com
參考
一、小例子
beanstalked.php
<?php
require '/root/beanstalkd/vendor/autoload.php';
use Pheanstalk\Pheanstalk;
return new Pheanstalk('127.0.0.1',11300);
?>
product.php
<?php
$pheanstalk=require './beanstalked.php';
$pheanstalk->useTube('zhengchengjun')->put(666);
?>
consumer.php
<?php
$pheanstalk=require './beanstalked.php';
while (true) {
$job=$pheanstalk->watch('zhengchengjun')->reserve();
echo($job->getData());
$pheanstalk->delete($job);
}
?>
二、pheanstalk的使用方法
1.stats() 查看隊列(由管道組成)狀態
<?php
$pheanstalk=require './beanstalked.php';
print_r($pheanstalk->stats());
?>
2.listTubes() 查看當前所有管道
<?php
$pheanstalk=require './beanstalked.php';
print_r($pheanstalk->listTubes());
?>
3.statsTube(tubeName) 查看指定管道信息
<?php
$pheanstalk=require './beanstalked.php';
print_r($pheanstalk->statsTube('default'));
?>
4.useTube(tubeName) 指定管道,管道存在就添由put添加job,管道不存在就新建這個管道再添加job
put(Job, [priority],delay) 添加任務至管道
delay多少秒後給才允許消費者消費,此時這個Job處於delay狀態。可以用statusTube來進行查看。
<?php
$pheanstalk=require './beanstalked.php';
$pheanstalk->useTube('newUsers')->put('test');
print_r($pheanstalk->statsTube('newUsers'));
?>
5.watch(tubeName) 設置要監聽的管道,可以同時設置多個
reserve([time]) 以阻塞的方式監聽管道,可以設置阻塞時間,不設置默認永久 statusjob()查看job的相關信息
<?php
$pheanstalk=require './beanstalked.php';
$job=$pheanstalk->watch('newUsers')->reserve();
$stats=$pheanstalk->statsJob($job);
print_r($stats);
?>
job信息裏有它的狀態和job id還有一些相關信息,ttr是最大允許在reverse的時間。超過這個時間沒有處理這個job。狀態就會重新設置爲ready。file是可以把你的隊列數據進行二進制存儲。要開啓。reservers key的含意是,一個job超過了ttr所設置的時間,沒有經過你的處理默認返回到了ready狀態。你又把他的狀態設爲reserved。來回兩種狀態的次數。timeouts是超時次數。buries進入預留狀態的次數。kicks從預留到時ready狀態的次數。
6.peek(job id根據job id得到job信息
<?php
$pheanstalk=require './beanstalked.php';
$job=$pheanstalk->peek(4);
$stats=$pheanstalk->statsJob($job);
print_r($stats);
?>
7.putInTube(tubename,jobcontent,prifily)
<?php
$pheanstalk=require './beanstalked.php';
//下面兩個job設置的優先級不一樣
//值越小優先級越大,優先級越大越先被消費者調用
$pheanstalk->putInTube('newUsers',66668,1000);
$pheanstalk->useTube('newUsers')->put(66661,10);
?>
可以使用以下代碼來測試優先級
<?php
$pheanstalk=require './beanstalked.php';
$job=$pheanstalk->watch('newUsers')->reserve();
print_r($job);
//讓這個job gg
$pheanstalk->delete($job);
?>
8.listTubesWatced()列出監聽的管道。ignore從監聽的管道中移除。
$pheanstalk=require './beanstalked.php';
$job=$pheanstalk->watch('newUsers')
->watch('default')
->ignore('default');
$tubes=$pheanstalk->listTubesWatched();
print_r($tubes);
8.release(job,[proifly(優先級)],[delay])把job的狀態更改爲ready
在一個模塊出錯的時候,我們應要把這個job放到重新放到管道中而不是刪除。
<?php
$pheanstalk=require './beanstalked.php';
$pheanstalk->useTube('newUsers')->put('member_1');
$job=$pheanstalk->watch('newUsers')->reserve();
$module=false;
if(!$module){
//30秒後job會從reserve狀態變成ready狀態
sleep(30);
$pheanstalk->release($job);
}else{
$pheanstalk->delete($job);
}
?>
8.bury()把這個job的狀態設置爲buired
<?php
$pheanstalk=require './beanstalked.php';
$job=$pheanstalk->useTube('newUsers')->reserve();
sleep(20);
//把這個job的狀態設置爲buired,就比如說此時你的郵件服務器涼了,
//就要把這個任務的狀態設置爲buired,等到你的郵件服務器恢復正常了,就把這個job設爲ready,交給消息費進行處理就好了。
$pheanstalk->bury($job);
?>
9.peekBuried(‘tubeName’)查看指定管道buired狀態的job,kickJob(Job)把一個job的狀態從buired變成ready,kick(num(一個數字)),所有job id小於這個數字的job都會由buired狀態變成ready狀態。
<?php
$pheanstalk=require './beanstalked.php';
//或者這樣$pheanstalk->userTube('newUsers')->kick(999),只要這一行就行
//下面的代碼可以不理會
$job=$Pheanstalk->peekBuried('newUsers');
var_dump($pheanstalk->statsJob($job));
$pheanstalk->kickJob($job);
var_dump($pheanstalk->statsJob($job))
?>
10.peekReady(),peekDelayed()分別是讀取指定管道ready狀態的job或者delay狀態的job
<?php
$pheanstalk=require './beanstalked.php';
$job=$pheanstalk->PeekReady('newUsers');
//$job=$pheanstalk->PeekDelayed('newUsers');
var_dump($job);
?>
11。pauseTube,resumeTube
<?php
$pheanstalk=require './beanstalked.php';
//整個管道延遲20秒
$pheanstalk->pauseTube('newUsers',20);
//讓管道的延遲取消 延遲的意思就是消息者要過了指定的時間纔可以消費
//$pheanstalk->resumeTube('newUsers');
?>