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 相关文章推荐
初探PHP5
Oct 09 PHP
一个没有MYSQL数据库支持的简易留言本的编写
Oct 09 PHP
PHP array_flip() 删除重复数组元素专用函数
May 16 PHP
PHP源码分析之变量的存储过程分解
Jul 03 PHP
php获取百度收录、百度热词及百度快照的方法
Apr 02 PHP
php实现数组中索引关联数据转换成json对象的方法
Jul 08 PHP
CI(CodeIgniter)模型用法实例分析
Jan 20 PHP
php中10个不同等级压缩优化图片操作示例
Nov 14 PHP
php解决DOM乱码的方法示例代码
Nov 20 PHP
php中html_entity_decode实现HTML实体转义
Jun 13 PHP
ThinkPHP 3使用OSS的方法
Jul 19 PHP
asp函数split()对应php函数explode()
Feb 27 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
上海无线电三厂简史修改版
2021/03/01 无线电
php获得当前的脚本网址
2007/12/10 PHP
Uchome1.2 1.5 代码学习 common.php
2009/04/24 PHP
PHP小程序自动提交到自助友情连接
2009/11/24 PHP
Yii2语言国际化的配置教程
2018/08/19 PHP
PHP常量及变量区别原理详解
2020/08/14 PHP
用javascript实现分割提取页面所需内容
2007/05/09 Javascript
使用EXT实现无刷新动态调用股票信息
2008/11/01 Javascript
jquery 查找新建元素代码
2010/07/06 Javascript
jQuery效果 slideToggle() 方法(在隐藏和显示之间切换)
2011/06/28 Javascript
js confirm()方法的使用方法实例
2013/07/13 Javascript
javascript内存管理详细解析
2013/11/11 Javascript
ECMAScript 6即将带给我们新的数组操作方法前瞻
2015/01/06 Javascript
jQuery使用removeClass方法删除元素指定Class的方法
2015/03/26 Javascript
深入理解JQuery中的事件与动画
2016/05/18 Javascript
angularjs 中$apply,$digest,$watch详解
2016/10/13 Javascript
简单理解vue中el、template、replace元素
2016/10/27 Javascript
利用Ionic2 + angular4实现一个地区选择组件
2017/07/27 Javascript
node.js中http模块和url模块的简单介绍
2017/10/06 Javascript
js点击时关闭该范围下拉菜单之外的菜单方法
2018/01/11 Javascript
Vue动态生成el-checkbox点击无法赋值的解决方法
2019/02/21 Javascript
[02:34]DOTA2亚洲邀请赛 BG战队出场宣传片
2015/03/09 DOTA
梯度下降法介绍及利用Python实现的方法示例
2017/07/12 Python
pytorch中的自定义反向传播,求导实例
2020/01/06 Python
开启Django博客的RSS功能的实现方法
2020/02/17 Python
Python数组并集交集补集代码实例
2020/02/18 Python
django迁移文件migrations的实现
2020/03/31 Python
说一下Linux下有关用户和组管理的命令
2016/01/04 面试题
27个经典Linux面试题及答案,你知道几个?
2014/03/11 面试题
美术专业学生个人自我评价
2013/09/19 职场文书
司机的工作范围及职责
2013/11/13 职场文书
人力资源部经理助理岗位职责
2014/03/04 职场文书
办公设备采购方案
2014/03/16 职场文书
全运会口号
2014/06/20 职场文书
2015年乡镇卫生院妇幼保健工作总结
2015/05/19 职场文书
公司联欢会主持词
2015/07/04 职场文书