PHP Beanstalkd消息队列的安装与使用方法实例详解


Posted in PHP onFebruary 21, 2020

本文实例讲述了PHP Beanstalkd消息队列的安装与使用方法。分享给大家供大家参考,具体如下:

一、Beanstalkd是什么?

Beanstalkd是一个高性能,轻量级的分布式内存队列

二、Beanstalkd特性

1、支持优先级(支持任务插队)
2、延迟(实现定时任务)
3、持久化(定时把内存中的数据刷到binlog日志)
4、预留(把任务设置成预留,消费者无法取出任务,等某个合适时机再拿出来处理)
5、任务超时重发(消费者必须在指定时间内处理任务,如果没有则认为任务失败,重新进入队列)

三、Beanstalkd核心元素

生产者 -> 管道(tube) -> 任务(job) -> 消费者

Beanstalkd可以创建多个管道,管道里面存了很多任务,消费者从管道中取出任务进行处理。

四、任务job状态

delayed 延迟状态
ready 准备好状态
reserved 消费者把任务读出来,处理时
buried 预留状态
delete 删除状态

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参数信息

> ./beanstalkd -h

启动beanstalkd

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

-b表示开启binlog,断电后重启自动恢复任务

六、下载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当前的状态信息
var_dump($p->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代码如下:

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

use Pheanstalk\Pheanstalk;

//创建一个Pheanstalk对象
$p = new Pheanstalk('192.168.1.222', 11300);

$data = array(
  'id' => 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代码如下:

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

use Pheanstalk\Pheanstalk;

//创建一个Pheanstalk对象
$p = new Pheanstalk('192.168.1.222', 11300);

//监听userReg管道,忽略default管道
$job = $p->watch('userReg')->ignore('default')->reserve();

$data = json_decode($job->getData());
//打印任务中的数据
print_r($data);

//最后删除任务,表示任务处理完成
$p->delete($job);

希望本文所述对大家PHP程序设计有所帮助。

PHP 相关文章推荐
PHP5中MVC结构学习
Oct 09 PHP
人大复印资料处理程序_输入篇
Oct 09 PHP
PHP学习笔记 IIS7下安装配置php环境
Oct 29 PHP
zf框架的db类select查询器join链表使用示例(zend框架)
Mar 14 PHP
ThinkPHP快速入门实例教程之数据分页
Jul 01 PHP
PHP面向对象精要总结
Nov 07 PHP
yii权限控制的方法(三种方法)
Dec 28 PHP
如何使用php等比例缩放图片
Oct 12 PHP
利用PHP获取网站访客的所在地位置
Jan 18 PHP
php实现留言板功能
Mar 05 PHP
PHP实现微信提现功能
Sep 30 PHP
PHP中数组转换为SimpleXML教程
Jan 27 PHP
PHP pthreads v3在centos7平台下的安装与配置操作方法
Feb 21 #PHP
PHP pthreads v3下worker和pool的使用方法示例
Feb 21 #PHP
PHP pthreads v3下同步处理synchronized用法示例
Feb 21 #PHP
PHP pthreads v3下的Volatile简介与使用方法示例
Feb 21 #PHP
PHP pthreads v3使用中的一些坑和注意点分析
Feb 21 #PHP
php使用pthreads v3多线程实现抓取新浪新闻信息操作示例
Feb 21 #PHP
php操作redis数据库常见方法实例总结
Feb 20 #PHP
You might like
SONY SRF-22W(33W)的电路分析和维修案例
2021/03/02 无线电
静态的动态续篇之来点XML
2006/12/23 Javascript
jQuery autocomplate 自扩展插件、自动完成示例代码
2011/03/28 Javascript
js与jquery获取父元素,删除子元素的两种不同方法
2014/01/09 Javascript
在JavaScript里防止事件函数高频触发和高频调用的方法
2014/09/06 Javascript
javascript原型模式用法实例详解
2015/06/04 Javascript
浅谈angular.js中实现双向绑定的方法$watch $digest $apply
2015/10/14 Javascript
Js动态设置rem来实现移动端字体的自适应代码
2016/10/14 Javascript
jquery+css3问卷答题卡翻页动画效果示例
2016/10/26 Javascript
JavaScript实现弹窗效果代码分析
2017/03/09 Javascript
基于rem的移动端响应式适配方案(详解)
2017/07/07 Javascript
Angular7创建项目、组件、服务以及服务的使用
2019/02/19 Javascript
微信小程序学习总结(四)事件与冒泡实例分析
2020/06/04 Javascript
在vue中封装的弹窗组件使用队列模式实现方法
2020/07/23 Javascript
es5 类与es6中class的区别小结
2020/11/09 Javascript
[03:22]DOTA2超级联赛专访单车:找到属于自己的英雄
2013/06/08 DOTA
[28:48]《真视界》- 2017年国际邀请赛
2017/09/27 DOTA
Python中使用异常处理来判断运行的操作系统平台方法
2015/01/22 Python
详解Python中的join()函数的用法
2015/04/07 Python
Python处理json字符串转化为字典的简单实现
2016/07/07 Python
Python基于回溯法子集树模板解决m着色问题示例
2017/09/07 Python
python交互式图形编程实例(三)
2017/11/17 Python
Python实现螺旋矩阵的填充算法示例
2017/12/28 Python
Python中optparser库用法实例详解
2018/01/26 Python
详解Django项目中模板标签及模板的继承与引用(网站中快速布置广告)
2019/03/27 Python
python字典setdefault方法和get方法使用实例
2019/12/25 Python
Python+PyQt5实现灭霸响指功能
2020/05/25 Python
Python 私有属性和私有方法应用场景分析
2020/06/19 Python
越南母婴用品购物网站:Kids Plaza
2020/04/09 全球购物
华为菲律宾官方网站:HUAWEI Philippines
2021/02/23 全球购物
历史专业个人求职信范文
2013/12/07 职场文书
公司董事长职责
2013/12/12 职场文书
公司法定代表人授权委托书
2014/09/29 职场文书
党员民主评议自我评价
2014/10/20 职场文书
2014年勤工助学工作总结
2014/11/24 职场文书
质量保证书格式模板
2015/02/27 职场文书