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 相关文章推荐
Mysql数据库操作类( 1127版,提供源码下载 )
Dec 02 PHP
PHP将整个网站生成HTML纯静态网页的方法总结
Feb 05 PHP
php获取文件大小的方法
Feb 26 PHP
php加速器eAccelerator的配置参数、API详解
May 05 PHP
PHP中使用虚代理实现延迟加载技术
Nov 05 PHP
php对象在内存中的存在形式分析
Feb 03 PHP
php设计模式之单例模式代码
Jun 11 PHP
Yii2中YiiBase自动加载类、引用文件方法分析(autoload)
Jul 25 PHP
PHP环形链表实现方法示例
Sep 15 PHP
PHP面向对象程序设计之多态性的应用示例
Dec 19 PHP
php中的buffer缓冲区用法分析
May 31 PHP
laravel框架如何设置公共头和公共尾
Oct 22 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
CI框架Session.php源码分析
2014/11/03 PHP
浅析Laravel5中队列的配置及使用
2016/08/04 PHP
PHP中CheckBox多选框上传失败的代码写法
2017/02/13 PHP
thinkphp Apache配置重启Apache1 restart 出错解决办法
2017/02/15 PHP
PHP SPL 被遗落的宝石【SPL应用浅析】
2018/04/20 PHP
JavaScript版代码高亮
2006/06/26 Javascript
jQuery Dialog 弹出层对话框插件
2010/08/09 Javascript
JS图片等比例缩放方法完整示例
2016/08/03 Javascript
浅谈js继承的实现及公有、私有、静态方法的书写
2016/10/28 Javascript
vue双向数据绑定原理探究(附demo)
2017/01/17 Javascript
ES6数组的扩展详解
2017/04/25 Javascript
Vue实现virtual-dom的原理简析
2017/07/10 Javascript
vue项目中使用Hbuilder打包app 设置沉浸式状态栏的方法
2018/10/22 Javascript
解决element-ui的下拉框有值却无法选中的情况
2020/11/07 Javascript
[03:59]第二届DOTA2亚洲邀请赛选手传记-VGJ.rOtk
2017/04/03 DOTA
Python交换变量
2008/09/06 Python
python抓取百度首页的方法
2015/05/19 Python
Python计算一个文件里字数的方法
2015/06/15 Python
一个基于flask的web应用诞生 flask和mysql相连(4)
2017/04/11 Python
Python中将变量按行写入txt文本中的方法
2018/04/03 Python
Python进阶之自定义对象实现切片功能
2019/01/07 Python
Python设计模式之适配器模式原理与用法详解
2019/01/15 Python
解决Python3用PIL的ImageFont输出中文乱码的问题
2019/08/22 Python
Python面向对象魔法方法和单例模块代码实例
2020/03/25 Python
意大利领先的线上奢侈品销售电商:Eleonora Bonucci
2017/10/17 全球购物
韩国11街:11STREET
2018/03/27 全球购物
Ibatis如何调用存储过程
2015/05/15 面试题
军训生自我鉴定范文
2013/12/27 职场文书
新年寄语大全
2014/04/12 职场文书
安全标语大全
2014/06/10 职场文书
公司感恩节活动策划书
2014/10/11 职场文书
证劵公司反洗钱宣传活动总结
2015/05/08 职场文书
运动会三级跳加油稿
2015/07/21 职场文书
python 模块重载的五种方法
2021/04/24 Python
Redis 限流器
2022/05/15 Redis
腾讯云服务器部署前后分离项目之前端部署
2022/06/28 Servers