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 相关文章推荐
我的论坛源代码(二)
Oct 09 PHP
PHP优于Node.js的五大理由分享
Sep 15 PHP
php查询相似度最高的字符串的方法
Mar 12 PHP
Cygwin中安装PHP方法步骤
Jul 04 PHP
Zend Framework+smarty用法实例详解
Mar 19 PHP
PHP快速推送微信模板消息
Apr 14 PHP
php简单读取.vcf格式文件的方法示例
Sep 02 PHP
PHP unlink与rmdir删除目录及目录下所有文件实例代码
Feb 07 PHP
thinkPHP框架实现类似java过滤器的简单方法示例
Sep 05 PHP
PHP使Laravel为JSON REST API返回自定义错误的问题
Oct 16 PHP
PHP MVC框架中类的自动加载机制实例分析
Sep 18 PHP
php设计模式之组合模式实例详解【星际争霸游戏案例】
Mar 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
PHP session有效期问题
2009/04/26 PHP
PHP MPDF中文乱码的解决方式
2015/12/08 PHP
准确获得页面、窗口高度及宽度的JS
2006/11/26 Javascript
在js中判断checkboxlist(.net控件客户端id)是否有选中
2013/04/11 Javascript
jquery fancybox ie6不显示关闭按钮的解决办法
2013/12/25 Javascript
jquery.ajax的url中传递中文乱码问题的解决方法
2014/02/07 Javascript
table行随鼠标移动变色示例
2014/05/07 Javascript
JS小游戏之象棋暗棋源码详解
2014/09/25 Javascript
小米公司JavaScript面试题
2014/12/29 Javascript
vue2.0父子组件间通信的实现方法
2017/04/19 Javascript
vue实现表格增删改查效果的实例代码
2017/07/18 Javascript
详解webpack提取第三方库的正确姿势
2017/12/22 Javascript
实例讲解vue源码架构
2019/01/24 Javascript
kafka调试中遇到Connection to node -1 could not be established. Broker may not be available.
2019/09/17 Javascript
Vue实现多标签选择器
2019/11/28 Javascript
Python实现将Excel转换成为image的方法
2018/10/23 Python
Python3.5基础之函数的定义与使用实例详解【参数、作用域、递归、重载等】
2019/04/26 Python
python:批量统计xml中各类目标的数量案例
2020/03/10 Python
Pycharm激活方法及详细教程(详细且实用)
2020/05/12 Python
TensorFlow保存TensorBoard图像操作
2020/06/23 Python
详解python中的闭包
2020/09/07 Python
Django生成数据库及添加用户报错解决方案
2020/10/09 Python
用python对excel进行操作(读,写,修改)
2020/12/25 Python
Rhone官方网站:男士运动服装、健身服装和高级运动服
2019/05/01 全球购物
SQL数据库笔试题
2016/03/08 面试题
卫生巾广告词
2014/03/18 职场文书
企业安全生产承诺书
2014/05/22 职场文书
体育口号大全
2014/06/18 职场文书
购房公证委托书(2014版)
2014/09/12 职场文书
2014个人四风对照检查材料思想汇报
2014/09/18 职场文书
临时租车协议范本
2014/09/23 职场文书
毕业论文指导教师评语
2014/12/30 职场文书
获奖感言一句话
2015/07/31 职场文书
创业计划书之暑假培训班
2019/11/09 职场文书
python区块链持久化和命令行接口实现简版
2022/05/25 Python
利用Java连接Hadoop进行编程
2022/06/28 Java/Android