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 相关文章推荐
BBS(php &amp; mysql)完整版(五)
Oct 09 PHP
php中常用字符串处理代码片段整理
Nov 07 PHP
destoon实现VIP排名一直在前面排序的方法
Aug 21 PHP
php通过array_shift()函数移除数组第一个元素的方法
Mar 18 PHP
PHP实现过滤掉非汉字字符只保留中文字符
Jun 04 PHP
PHP实现通过get方式识别用户发送邮件的方法
Jul 16 PHP
php文件上传后端处理小技巧
May 22 PHP
PHP7新特性foreach 修改示例介绍
Aug 26 PHP
php封装的smarty类完整实例
Oct 19 PHP
php中替换字符串函数strtr()和str_repalce()的用法与区别
Nov 25 PHP
php获取ajax的headers方法与内容实例
Dec 27 PHP
PHP配置文件php.ini中打开错误报告的设置方法
Jan 09 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 abstract 抽象类定义与用法示例
2018/05/29 PHP
PHP+百度AI OCR文字识别实现了图片的文字识别功能
2019/05/08 PHP
js或者jquery判断图片是否加载完成实现代码
2013/03/20 Javascript
JAVASCRIPT模式窗口中下载文件无法接收iframe的流
2013/10/11 Javascript
简单选项卡 js和jquery制作方法分享
2014/02/26 Javascript
javascript将异步校验表单改写为同步表单
2015/01/27 Javascript
JS控制网页动态生成任意行列数表格的方法
2015/03/09 Javascript
JavaScript中的Math.LOG2E属性使用详解
2015/06/14 Javascript
jQuery实现右侧显示可向左滑动展示的深色QQ客服效果代码
2015/10/23 Javascript
jQuery mobile类库使用时加载导航历史的方法简介
2015/12/04 Javascript
Jquery为DIV添加click事件的简单实例
2016/06/02 Javascript
JS实现的验证身份证及获取地区功能示例
2017/01/16 Javascript
JavaScript的for循环中嵌套一个点击事件的问题解决
2017/03/03 Javascript
koa2 数据api中间件设计模型的实现方法
2020/07/13 Javascript
JavaScript实现滑块验证解锁
2021/01/07 Javascript
[57:55]完美世界DOTA2联赛PWL S3 Magma vs Phoenix 第二场 12.12
2020/12/16 DOTA
Python学习笔记之常用函数及说明
2014/05/23 Python
Python StringIO模块实现在内存缓冲区中读写数据
2015/04/08 Python
Python中在脚本中引用其他文件函数的实现方法
2016/06/23 Python
老生常谈进程线程协程那些事儿
2017/07/24 Python
python 实现对数据集的归一化的方法(0-1之间)
2018/07/17 Python
anaconda如何查看并管理python环境
2019/07/05 Python
Golang GBK转UTF-8的例子
2019/08/26 Python
Pyspark获取并处理RDD数据代码实例
2020/03/27 Python
在Ubuntu 20.04中安装Pycharm 2020.1的图文教程
2020/04/30 Python
Django form表单与请求的生命周期步骤详解
2020/06/07 Python
Python进行统计建模
2020/08/10 Python
爱尔兰家电数码商城:Currys PC World爱尔兰
2016/07/23 全球购物
实习生个人找工作的自我评价
2013/10/30 职场文书
大学生校园创业计划书
2014/02/08 职场文书
社会学专业求职信
2014/07/17 职场文书
工作作风承诺书
2014/08/30 职场文书
企业法人授权委托书范本
2014/09/23 职场文书
银行党的群众路线教育实践活动对照检查材料
2014/09/25 职场文书
上课说话检讨书
2015/01/27 职场文书
第一节英语课开场白
2015/06/01 职场文书