PHP Beanstalkd消息队列的安装与使用方法实例详解
本文实例讲述了PHPBeanstalkd消息队列的安装与使用方法。分享给大家供大家参考,具体如下:
一、Beanstalkd是什么?
Beanstalkd是一个高性能,轻量级的分布式内存队列
二、Beanstalkd特性
1、支持优先级(支持任务插队)
2、延迟(实现定时任务)
3、持久化(定时把内存中的数据刷到binlog日志)
4、预留(把任务设置成预留,消费者无法取出任务,等某个合适时机再拿出来处理)
5、任务超时重发(消费者必须在指定时间内处理任务,如果没有则认为任务失败,重新进入队列)
三、Beanstalkd核心元素
生产者->管道(tube)->任务(job)->消费者
Beanstalkd可以创建多个管道,管道里面存了很多任务,消费者从管道中取出任务进行处理。
四、任务job状态
delayed延迟状态
ready准备好状态
reserved消费者把任务读出来,处理时
buried预留状态
delete删除状态
五、安装Beanstalkd
http://kr.github.io/beanstalkd/download.html
下载beanstalkd-1.10.tar.gz
>tar-xfbeanstalkd-1.10.tar.gz >cdbeanstalkd-1.10 >make
查看beanstalkd参数信息
>./beanstalkd-h
启动beanstalkd
>./beanstalkd-l127.0.0.1-p11300-b/data/beanstalkd/binlog&
-b表示开启binlog,断电后重启自动恢复任务
六、下载Pheanstalk类
首先安装composer
>curl-sShttps://getcomposer.org/installer|php >mvcomposer.phar/usr/local/bin/composer >composerrequirepda/pheanstalk
编写一个简单脚本查看信息
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代码如下:
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代码如下:
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程序设计有所帮助。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。