安装
yum instll -y beanstalkd
php中如何使用呢
pheanstalk
安装了composer(可以使用yum进行安装)之后,如果你的服务器所在的网络环境在国内的话还是需要配置国的的composer源。
运行下图命令,使用composer安装依赖包
composer config -g repo.packagist composer https://packagist.phpcomposer.com
参考
一、小例子
beanstalked.php
<?php
require '/root/beanstalkd/vendor/autoload.php';//composer 自动加载类,根据命名空间
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');
?>