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获取当前网址url并替换参数或网址的方法
Jun 06 PHP
PHP常用代码大全(新手入门必备)
Jun 29 PHP
PHP读取txt文件的内容并赋值给数组的代码
Nov 03 PHP
php页面跳转代码 输入网址跳转到你定义的页面
Mar 28 PHP
PHP制作万年历
Jan 07 PHP
PHP结合Jquery和ajax实现瀑布流特效
Jan 07 PHP
最新版本PHP 7 vs HHVM 多角度比较
Feb 14 PHP
py文件转exe时包含paramiko模块出错解决方法
Aug 12 PHP
php文件包含目录配置open_basedir的使用与性能详解
Apr 03 PHP
老生常谈PHP数组函数array_merge(必看篇)
May 25 PHP
详解thinkphp中的volist标签
Jan 15 PHP
PHP集成环境XAMPP的安装与配置
Nov 13 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获取文件类型和文件信息的方法
2015/07/10 PHP
php读取torrent种子文件内容的方法(测试可用)
2016/05/03 PHP
Yii实现的多级联动下拉菜单
2016/07/13 PHP
PHP微信H5支付开发实例
2018/07/25 PHP
从Ajax到JQuery Ajax学习
2007/02/14 Javascript
javascript json2 使用方法
2010/03/16 Javascript
jQuery中绑定事件的命名空间详解
2011/04/05 Javascript
javascript实现密码强度显示
2015/03/18 Javascript
jQuery实现分隔条左右拖动功能
2015/11/21 Javascript
JS中mouseover和mouseout多次触发问题如何解决
2016/06/06 Javascript
百度地图API之百度地图退拽标记点获取经纬度的实现代码
2017/01/12 Javascript
jQuery插件Echarts实现的渐变色柱状图
2017/03/23 jQuery
Vue.Js中的$watch()方法总结
2017/03/23 Javascript
Vue.js移动端左滑删除组件的实现代码
2017/09/08 Javascript
Webpack实战加载SVG的方法
2017/12/26 Javascript
Vue通过provide inject实现组件通信
2020/09/03 Javascript
详解Vue 的异常处理机制
2020/11/30 Vue.js
python基础教程之获取本机ip数据包示例
2014/02/10 Python
仅用50行Python代码实现一个简单的代理服务器
2015/04/08 Python
Python实现在matplotlib中两个坐标轴之间画一条直线光标的方法
2015/05/20 Python
Python 2与Python 3版本和编码的对比
2017/02/14 Python
Python+matplotlib实现计算两个信号的交叉谱密度实例
2018/01/08 Python
TensorFlow的权值更新方法
2018/06/14 Python
如何使用Pytorch搭建模型
2020/10/26 Python
中国第一家杂志折扣订阅网:杂志铺
2016/08/30 全球购物
大四毕业生学习总结的自我评价
2013/10/31 职场文书
新入职员工的自我介绍演讲稿
2014/01/02 职场文书
学校运动会广播稿范文
2014/10/02 职场文书
班级光棍节联谊会策划书
2014/10/10 职场文书
四风问题党员个人整改措施
2014/10/27 职场文书
教师党的群众路线教育实践活动学习心得体会
2014/10/30 职场文书
社会实践活动总结
2015/02/05 职场文书
药品销售内勤岗位职责
2015/04/13 职场文书
团支部书记竞选稿
2015/11/21 职场文书
如何用JavaScript学习算法复杂度
2021/04/30 Javascript
分析SQL窗口函数之排名窗口函数
2022/04/21 Oracle