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 正则表达式小结
Aug 31 PHP
php preg_filter执行一个正则表达式搜索和替换
Feb 27 PHP
php的一个简单加密解密代码
Jan 14 PHP
回帖脱衣服的图片实现代码
Feb 15 PHP
CI框架学习笔记(二) -入口文件index.php
Oct 27 PHP
PHP实现通用alert函数的方法
Mar 11 PHP
php带抄送和密件抄送的邮件发送方法
Mar 20 PHP
利用PHP如何实现Socket服务器
Sep 23 PHP
php获取远程文件的内容和大小
Nov 03 PHP
解决form中action属性后面?传递参数 获取不到的问题
Jul 21 PHP
php 数据结构之链表队列
Oct 17 PHP
php xhprof使用实例详解
Apr 15 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(三)
2012/03/22 PHP
PHP改进计算字符串相似度的函数similar_text()、levenshtein()
2014/10/27 PHP
smarty表格换行实例
2014/12/15 PHP
php随机生成数字字母组合的方法
2015/03/18 PHP
用php代码限制国内IP访问我们网站
2015/09/26 PHP
简单的jquery拖拽排序效果实现代码
2011/09/20 Javascript
jQuery中insertBefore()方法用法实例
2015/01/08 Javascript
微信企业号开发之微信考勤百度地图定位
2015/09/11 Javascript
jquery判断checkbox是否选中及改变checkbox状态的实现方法
2016/05/26 Javascript
javascript中使用未定义变量或值的情况分析
2016/07/19 Javascript
Javascript ES6中数据类型Symbol的使用详解
2017/05/02 Javascript
Vue 后台管理类项目兼容IE9+的方法示例
2019/02/20 Javascript
Postman如何实现参数化执行及断言处理
2020/07/28 Javascript
原生js实现点击按钮复制内容到剪切板
2020/11/19 Javascript
Python简单定义与使用二叉树示例
2018/05/11 Python
Python实现的json文件读取及中文乱码显示问题解决方法
2018/08/06 Python
python三引号输出方法
2019/02/27 Python
python3中类的继承以及self和super的区别详解
2019/06/26 Python
Python PIL图片添加字体的例子
2019/08/22 Python
Python 转换文本编码实现解析
2019/08/27 Python
python自动化实现登录获取图片验证码功能
2019/11/20 Python
Python文本处理简单易懂方法解析
2019/12/19 Python
pytorch AvgPool2d函数使用详解
2020/01/03 Python
python实现单张图像拼接与批量图片拼接
2020/03/23 Python
Python新建项目自动添加介绍和utf-8编码的方法
2020/12/26 Python
详解HTML5 Canvas标签及基本使用
2020/01/10 HTML / CSS
线程的基本概念、线程的基本状态以及状态之间的关系
2012/10/26 面试题
试用期自我鉴定范文
2014/03/20 职场文书
教研处工作方案
2014/05/26 职场文书
小学生国庆演讲稿
2014/09/05 职场文书
员工教育培训协议书
2014/09/27 职场文书
大学生暑期社会实践证明范本
2014/10/24 职场文书
2015年入党积极分子培养考察意见
2015/08/12 职场文书
2016三严三实专题教育活动心得体会
2016/01/06 职场文书
用python开发一款操作MySQL的小工具
2021/05/12 Python
JavaScript中的LHS和RHS分析详情
2022/04/06 Javascript