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 相关文章推荐
用PHP制作静态网站的模板框架(三)
Oct 09 PHP
一贴学会PHP 新手入门教程
Aug 03 PHP
yii框架配置默认controller和action示例
Apr 30 PHP
PHP文件缓存内容保存格式实例分析
Aug 20 PHP
php给每个段落添加空格的方法
Mar 20 PHP
Zend Framework动作助手Json用法实例分析
Mar 05 PHP
PHP中include/require/include_once/require_once使用心得
Aug 28 PHP
ThinkPHP中调用PHPExcel的实现代码
Apr 08 PHP
PHP实现动态添加XML中数据的方法
Mar 30 PHP
PHP命名空间与自动加载类详解
Sep 04 PHP
Laravel统计一段时间间隔的数据方法
Oct 09 PHP
Yii实现微信公众号场景二维码的方法实例
Aug 30 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
php实现的DateDiff和DateAdd时间函数代码分享
2014/08/16 PHP
PHP中使用json数据格式定义字面量对象的方法
2014/08/20 PHP
C#静态方法与非静态方法实例分析
2014/09/22 PHP
PHP使用PDO实现mysql防注入功能详解
2019/12/20 PHP
常用一些Javascript判断函数
2012/08/14 Javascript
纯JS实现动态时间显示代码
2014/02/08 Javascript
js控制输入框获得和失去焦点时状态显示的方法
2015/01/30 Javascript
js中实现字符串和数组的相互转化详解
2016/01/24 Javascript
jQuery.ajax 跨域请求webapi设置headers的解决方案
2016/08/08 Javascript
微信小程序云开发之云函数详解
2019/05/16 Javascript
JavaScript RegExp 对象用法详解
2019/09/24 Javascript
vue使用nprogress实现进度条
2019/12/09 Javascript
React.js组件实现拖拽排序组件功能过程解析
2020/04/27 Javascript
three.js 制作动态二维码的示例代码
2020/07/31 Javascript
[01:56]生活中的妖精之七夕特别档
2016/08/09 DOTA
Python中的Matplotlib模块入门教程
2015/04/15 Python
使用Python发送邮件附件以定时备份MySQL的教程
2015/04/25 Python
Python注释详解
2016/06/01 Python
从CentOS安装完成到生成词云python的实例
2017/12/01 Python
python 读取摄像头数据并保存的实例
2018/08/03 Python
Python模拟百度自动输入搜索功能的实例
2019/02/14 Python
Selenium使用Chrome模拟手机浏览器方法解析
2020/04/10 Python
Python logging日志库空间不足问题解决
2020/09/14 Python
利用python清除移动硬盘中的临时文件
2020/10/28 Python
有趣的睡衣和礼物:LazyOne
2019/11/27 全球购物
乌克兰品牌化妆品和香水在线商店:Bomond
2020/01/14 全球购物
如何进行有效的自我评价
2013/09/27 职场文书
大学生毕业求职的自我评价
2013/09/29 职场文书
毕业生的自我评价范文
2013/12/31 职场文书
法学专业自我鉴定
2014/02/05 职场文书
个人公开承诺书
2014/03/28 职场文书
班级学习雷锋活动总结
2014/07/04 职场文书
小学一年级数学教学计划
2015/01/20 职场文书
国庆阅兵观后感
2015/06/15 职场文书
uni-app 微信小程序授权登录的实现步骤
2022/02/18 Javascript
十大最强妖精系宝可梦,哲尔尼亚斯实力最强,第五被称为大力士
2022/03/18 日漫