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
建站常用13种PHP开源CMS比较
Aug 23 PHP
PHP下对数组进行排序的函数
Aug 08 PHP
php中通过正则表达式下载内容中的远程图片的函数代码
Jan 10 PHP
php解析html类库simple_html_dom(详细介绍)
Jul 05 PHP
PHP5中实现多态的两种方法实例分享
Apr 21 PHP
全面解读PHP的人气开发框架Laravel
Oct 15 PHP
php mysql like 实现多关键词搜索的方法
Oct 29 PHP
php操作access数据库的方法详解
Feb 22 PHP
php查询内存信息操作示例
May 09 PHP
php fread函数使用方法总结
May 28 PHP
PHP递归统计系统中代码行数
Sep 19 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
dedecms后台验证码总提示错误的解决方法
2007/03/21 PHP
php中判断文件存在是用file_exists还是is_file的整理
2012/09/12 PHP
php存储过程调用实例代码
2013/02/03 PHP
[原创]smarty简单模板变量输出方法
2016/07/09 PHP
php实现将base64格式图片保存在指定目录的方法
2016/10/13 PHP
实现PHP中session存储及删除变量
2018/10/15 PHP
PHP7创建销毁session的实例方法
2020/02/03 PHP
TP - 比RBAC更好的权限认证方式(Auth类认证)
2021/03/09 PHP
JQuery 简便实现页面元素数据验证功能
2007/03/24 Javascript
Jquery中的CheckBox、RadioButton、DropDownList的取值赋值实现代码
2011/10/12 Javascript
jQuery过滤选择器:not()方法使用介绍
2014/04/20 Javascript
javascript引用类型指针的工作方式
2015/04/13 Javascript
javascript实现右侧弹出“分享到”窗口效果
2016/02/01 Javascript
jQuery on()方法绑定动态元素的点击事件无响应的解决办法
2016/07/07 Javascript
功能强大的jquery.validate表单验证插件
2016/11/07 Javascript
KOA+egg.js集成kafka消息队列的示例
2018/11/09 Javascript
Vue插槽原理与用法详解
2019/03/05 Javascript
angularjs自定义过滤器demo示例
2019/08/24 Javascript
vuejs实现下拉框菜单选择
2020/10/23 Javascript
[02:09]EHOME夺得首届辉夜杯冠军—现场颁奖仪式
2015/12/28 DOTA
[05:37]DOTA2-DPC中国联赛 正赛 Elephant vs iG 选手采访
2021/03/11 DOTA
python数据结构树和二叉树简介
2014/04/29 Python
Python与Redis的连接教程
2015/04/22 Python
Python实现网站注册验证码生成类
2017/06/08 Python
深入理解Python3 内置函数大全
2017/11/23 Python
python2和python3在处理字符串上的区别详解
2019/05/29 Python
jupyter notebook清除输出方式
2020/04/10 Python
英国高街品牌:Miss Selfridge(塞尔弗里奇小姐)
2016/09/21 全球购物
研发工程师的岗位职责
2013/11/18 职场文书
汽车技术服务与营销专业推荐信
2013/11/29 职场文书
吸烟检讨书2000字
2014/02/13 职场文书
文员岗位职责
2015/02/04 职场文书
雷峰塔导游词
2015/02/09 职场文书
2019运动会广播加油稿汇总
2019/08/21 职场文书
CSS3 菱形拼图实现只旋转div 背景图片不旋转功能
2021/03/30 HTML / CSS
Java实现多文件上传功能
2021/06/30 Java/Android