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 设计模式之 单例模式
Dec 19 PHP
php上传文件中文文件名乱码的解决方法
Nov 01 PHP
php教程之魔术方法的使用示例(php魔术函数)
Feb 12 PHP
php使用Session和文件统计在线人数
Jul 04 PHP
yii,CI,yaf框架+smarty模板使用方法
Dec 29 PHP
深入理解PHP 数组之count 函数
Jun 13 PHP
使用PHP连接多种数据库的实现代码(mysql,access,sqlserver,Oracle)
Dec 21 PHP
PHP实现的最大正向匹配算法示例
Dec 19 PHP
PHP使用PDO抽象层获取查询结果的方法示例
May 10 PHP
php命名空间设计思想、用法与缺点分析
Jul 17 PHP
浅谈Laravel中的三种中间件的作用
Oct 13 PHP
PHP isset empty函数相关面试题及解析
Dec 11 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数组一对一替换实现代码
2012/08/31 PHP
PHP关联数组的10个操作技巧
2013/01/21 PHP
PHP实现Soap通讯的方法
2014/11/03 PHP
JS中处理与当前时间间隔的函数代码
2012/05/23 Javascript
JS限制上传图片大小不使用控件在本地实现
2012/12/19 Javascript
使用js正则控制input标签只允许输入的值
2013/07/29 Javascript
jQuery中noconflict函数的实现原理分解
2015/02/03 Javascript
JS实现仿QQ面板的手风琴效果折叠菜单代码
2015/09/11 Javascript
JS截取字符串实例详解
2015/11/24 Javascript
JavaScript——DOM操作——Window.document对象详解
2016/07/14 Javascript
vue2.0开发实践总结之疑难篇
2016/12/07 Javascript
js实现可以点击收缩或张开的悬浮窗
2017/09/18 Javascript
jQuery实现表格隔行换色
2018/09/01 jQuery
JS中判断字符串存在和非空的方法
2018/09/12 Javascript
微信小程序组件传值图示过程详解
2019/07/31 Javascript
将RGB值转换为灰度值的简单算法
2019/10/09 Javascript
vue实现点击按钮“查看详情”弹窗展示详情列表操作
2020/09/09 Javascript
python计算最大优先级队列实例
2013/12/18 Python
Python使用turtule画五角星的方法
2015/07/09 Python
JPype实现在python中调用JAVA的实例
2017/07/19 Python
python生成器,可迭代对象,迭代器区别和联系
2018/02/04 Python
Python实现求解一元二次方程的方法示例
2018/06/20 Python
TensorFlow实现简单的CNN的方法
2019/07/18 Python
python实现简单银行管理系统
2019/10/25 Python
Python实现子类调用父类的初始化实例
2020/03/12 Python
python程序实现BTC(比特币)挖矿的完整代码
2021/01/20 Python
美国知名户外用品畅销中心:Sierra Trading Post
2016/07/19 全球购物
雷朋巴西官方商店:Ray-Ban Brasil
2020/07/21 全球购物
物流合作计划书
2014/01/10 职场文书
给水工程专业毕业生自荐信
2014/01/28 职场文书
ktv周年庆活动方案
2014/08/18 职场文书
党员群众路线教育实践活动剖析材料
2014/10/10 职场文书
关于社会实践的心得体会(2016最新版)
2016/01/25 职场文书
如何使用vue3打造一个物料库
2021/05/08 Vue.js
redis客户端实现高可用读写分离的方式详解
2021/07/04 Redis
PyTorch中的torch.cat简单介绍
2022/03/17 Python