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 15 PHP
linux下 C语言对 php 扩展
Dec 14 PHP
PHP 批量删除数据的方法分析
Oct 30 PHP
php 自写函数代码 获取关键字 去超链接
Feb 08 PHP
Apache中php.ini的设置方法
Feb 28 PHP
php使用COPY函数更新配置文件的方法
Jun 18 PHP
PHP简单判断字符串是否包含另一个字符串的方法
Mar 25 PHP
ThinkPHP中session函数详解
Sep 14 PHP
Laravel框架分页实现方法分析
Jun 12 PHP
php中的buffer缓冲区用法分析
May 31 PHP
浅谈Laravel模板实体转义带来的坑
Oct 22 PHP
Apache+PHP+MySQL搭建PHP开发环境图文教程
Aug 06 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 调试利器debug_print_backtrace()
2012/07/23 PHP
解决PHP mysql_query执行超时(Fatal error: Maximum execution time …)
2013/07/03 PHP
PHP PDOStatement:bindParam插入数据错误问题分析
2013/11/13 PHP
php使用str_replace替换多维数组的实现方法分析
2017/06/15 PHP
PHP各种常见经典算法总结【排序、查找、翻转等】
2019/08/05 PHP
Extjs学习笔记之八 继承和事件基础
2010/01/08 Javascript
JavaScript学习点滴 call、apply的区别
2010/10/22 Javascript
复选框全选与全不选操作实现思路
2013/08/18 Javascript
JS截取字符串常用方法详细整理
2013/10/28 Javascript
javascript实现数字+字母验证码的简单实例
2014/02/10 Javascript
jQuery学习笔记之jQuery.extend(),jQuery.fn.extend()分析
2014/06/09 Javascript
JavaScript匿名函数与委托使用示例
2014/07/22 Javascript
javascript中if和switch,==和===详解
2015/07/30 Javascript
jquery.flot.js简单绘制折线图用法示例
2017/03/13 Javascript
深入剖析Express cookie-parser中间件实现示例
2018/02/01 Javascript
使用淘宝镜像cnpm安装Vue.js的图文教程
2018/05/17 Javascript
原生JS实现旋转轮播图+文字内容切换效果【附源码】
2018/09/29 Javascript
[01:01:52]DOTA2-DPC中国联赛正赛 iG vs LBZS BO3 第一场 3月4日
2021/03/11 DOTA
Python中条件选择和循环语句使用方法介绍
2013/03/13 Python
以Flask为例讲解Python的框架的使用方法
2015/04/29 Python
Python守护线程用法实例
2017/06/23 Python
windows下python和pip安装教程
2018/05/25 Python
python实现邮件发送功能
2019/08/10 Python
Python logging设置和logger解析
2019/08/28 Python
django框架两个使用模板实例
2019/12/11 Python
Python PyQt5模块实现窗口GUI界面代码实例
2020/05/12 Python
python 实现波浪滤镜特效
2020/12/02 Python
HTML5语义化元素你真的用对了吗
2019/08/22 HTML / CSS
记一次高分屏下canvas模糊问题
2020/02/17 HTML / CSS
2014全国两会心得体会
2014/03/17 职场文书
院党委组织查摆问题对照检查材料思想汇报2014
2014/10/08 职场文书
鲁滨孙漂流记读书笔记
2015/06/30 职场文书
生日寿星公答谢词
2015/09/29 职场文书
2019广播稿怎么写
2019/04/17 职场文书
网络安全倡议书(3篇)
2019/09/18 职场文书
redis限流的实际应用
2021/04/24 Redis