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数组对百万数据进行排除重复数据的实现代码
Jun 08 PHP
比较简单的百度网盘文件直链PHP代码
Mar 24 PHP
php 获取本地IP代码
Jun 23 PHP
smarty获得当前url的方法分享
Feb 14 PHP
PHP移动文件指针ftell()、fseek()、rewind()函数总结
Nov 18 PHP
简单说说PHP优化那些事(经验分享)
Nov 27 PHP
php实现将任意进制数转换成10进制的方法
Apr 17 PHP
深入浅析php json 格式控制
Dec 24 PHP
Zend Framework教程之资源(Resources)用法实例详解
Mar 14 PHP
php 如何设置一个严格控制过期时间的session
May 05 PHP
PHP异步进程助手async-helper
Feb 05 PHP
php使用环形链表解决约瑟夫问题完整示例
Aug 07 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 中dirname(_file_)讲解
2007/03/18 PHP
PHP中用hash实现的数组
2011/07/17 PHP
php中选择什么接口(mysql、mysqli)访问mysql
2013/02/06 PHP
使用PHP导出Word文档的原理和实例
2013/10/21 PHP
PHP性能分析工具XHProf安装使用教程
2015/05/13 PHP
使用图灵api创建微信聊天机器人
2015/07/23 PHP
php 三大特点:封装,继承,多态
2017/02/19 PHP
数组任意位置插入元素,删除特定元素的实例
2017/03/02 PHP
Yii2语言国际化的配置教程
2018/08/19 PHP
PHP实现唤起微信支付功能
2019/02/18 PHP
location对象的属性和方法应用(解析URL)
2013/04/12 Javascript
jquery实现翻动fadeIn显示的方法
2015/03/05 Javascript
举例详解AngularJS中ngShow和ngHide的使用方法
2015/06/19 Javascript
javascript类型系统——日期Date对象全面了解
2016/07/13 Javascript
基于BootStrap与jQuery.validate实现表单提交校验功能
2016/12/22 Javascript
bootstrap的工具提示实例代码
2017/05/17 Javascript
微信小程序实现文字跑马灯效果
2020/05/26 Javascript
对Vue- 动态元素属性及v-bind和v-model的区别详解
2018/08/27 Javascript
前后端常见的几种鉴权方式(小结)
2019/08/04 Javascript
[43:53]OG vs EG 2019国际邀请赛淘汰赛 胜者组 BO3 第三场 8.22
2019/09/05 DOTA
Python中列表的一些基本操作知识汇总
2015/05/20 Python
python解决网站的反爬虫策略总结
2016/10/26 Python
python实现的AES双向对称加密解密与用法分析
2017/05/02 Python
Python解决N阶台阶走法问题的方法分析
2017/12/28 Python
python K近邻算法的kd树实现
2018/09/06 Python
Python如何输出整数
2020/06/07 Python
python打开音乐文件的实例方法
2020/07/21 Python
移动端rem布局的两种实现方法
2018/01/03 HTML / CSS
怎样比较两个类型为String的字符串
2016/08/17 面试题
校园安全教育广播稿
2014/02/17 职场文书
2014庆六一活动方案
2014/03/02 职场文书
学期评语大全
2014/04/30 职场文书
感恩的演讲稿
2014/05/06 职场文书
感恩小明星事迹材料
2014/05/23 职场文书
校园广播稿范文
2015/08/19 职场文书
学校2016年圣诞节活动总结
2016/03/31 职场文书