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 相关文章推荐
用libtemplate实现静态网页生成
Oct 09 PHP
用PHP书写安全的脚本代码
Feb 05 PHP
PHP中一些可以替代正则表达式函数的字符串操作函数
Nov 17 PHP
最准确的php截取字符串长度函数
Oct 29 PHP
php中二分法查找算法实例分析
Sep 22 PHP
php与python实现的线程池多线程爬虫功能示例
Oct 12 PHP
CI框架常用经典操作类总结(路由,伪静态,分页,session,验证码等)
Nov 21 PHP
源码分析 Laravel 重复执行同一个队列任务的原因
Dec 25 PHP
win7 wamp 64位 php环境开启curl服务遇到的问题及解决方法
Sep 16 PHP
PHP实现对数字分隔加千分号的方法
Mar 18 PHP
laravel 解决ajax异步提交数据,并还回填充表格的问题
Oct 15 PHP
关于laravel 子查询 &amp; join的使用
Oct 16 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
攻克CakePHP系列二 表单数据显示
2008/10/22 PHP
Discuz Uchome ajaxpost小技巧
2011/01/04 PHP
php 生成短网址原理及代码
2014/01/23 PHP
php调用新浪短链接API的方法
2014/11/08 PHP
Mac系统完美安装PHP7详细教程
2017/06/06 PHP
js的逻辑运算符 ||
2010/05/31 Javascript
解决jquery的.animate()函数在IE6下的问题
2010/12/03 Javascript
7个JS基础知识总结
2014/03/05 Javascript
JavaScript数据结构和算法之图和图算法
2015/02/11 Javascript
鼠标经过子元素触发mouseout,mouseover事件的解决方案
2015/07/26 Javascript
JavaScript事件类型中UI事件详解
2016/01/14 Javascript
动态更新highcharts数据的实现方法
2016/05/28 Javascript
关于angular js_$watch监控属性和对象详解
2017/04/24 Javascript
vue-quill-editor实现图片上传功能
2017/08/08 Javascript
微信小程序获取手机号授权用户登录功能
2017/11/09 Javascript
JavaScript笛卡尔积超简单实现算法示例
2018/07/30 Javascript
微信小程序如何获取手机验证码
2018/11/04 Javascript
jQuery+css last-child实现选择最后一个子元素操作示例
2018/12/10 jQuery
JavaScript页面加载事件实例讲解
2019/09/01 Javascript
layui 监听select选择 获取当前select的ID名称方法
2019/09/24 Javascript
详解ES6实现类的私有变量的几种写法
2021/02/10 Javascript
python编程-将Python程序转化为可执行程序[整理]
2007/04/09 Python
用Python写脚本,实现完全备份和增量备份的示例
2018/04/29 Python
利用Python实现微信找房机器人实例教程
2019/03/10 Python
如何使用Python标准库进行性能测试
2019/06/25 Python
Python selenium爬取微博数据代码实例
2020/05/22 Python
Keras:Unet网络实现多类语义分割方式
2020/06/11 Python
Python+Kepler.gl实现时间轮播地图过程解析
2020/07/20 Python
CSS3+js实现简单的时钟特效
2015/03/18 HTML / CSS
Staples美国官方网站:办公用品一站式采购
2016/07/28 全球购物
P D PAOLA意大利官网:西班牙著名的珠宝首饰品牌
2019/09/24 全球购物
家得宝墨西哥官网:The Home Depot墨西哥
2019/11/18 全球购物
机械设计及其自动化专业求职信
2014/06/09 职场文书
2014年幼儿园安全工作总结
2014/11/10 职场文书
教育实习指导教师评语
2014/12/31 职场文书
使用Redis实现秒杀功能的简单方法
2021/05/08 Redis