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 $_SERVER当前完整url的写法
Nov 12 PHP
php数组声明、遍历、数组全局变量使用小结
Jun 05 PHP
PHP删除HTMl标签的实现代码
Jun 30 PHP
php调用Google translate_tts api实现代码
Aug 07 PHP
php上传文件中文文件名乱码的解决方法
Nov 01 PHP
php 发送带附件邮件示例
Jan 23 PHP
在Yii框架中使用PHP模板引擎Twig的例子
Jun 13 PHP
php中动态修改ini配置
Oct 14 PHP
php each 返回数组中当前的键值对并将数组指针向前移动一步实例
Nov 22 PHP
PHP中将一个字符串部分字符用星号*替代隐藏的实现代码
Sep 08 PHP
tp5.1 框架数据库高级查询技巧实例总结
May 25 PHP
PHP code 验证码生成类定义和简单使用示例
May 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
模拟SQLSERVER的两个函数:dateadd(),datediff()
2006/10/09 PHP
php学习之 数组声明
2011/06/09 PHP
PHP集成百度Ueditor 1.4.3
2014/11/23 PHP
php实现的一段简单概率相关代码
2016/05/30 PHP
浅谈php中urlencode与rawurlencode的区别
2016/09/05 PHP
PHP设计模式之模板方法模式实例浅析
2018/12/20 PHP
javascript DOM编程实例(智播客学习)
2009/11/23 Javascript
javaScript同意等待代码实现心得
2011/01/01 Javascript
20行代码实现的一个CSS覆盖率测试脚本
2013/07/07 Javascript
JavaScript伸缩的菜单简单示例
2013/12/03 Javascript
js实现TAB切换对应不同颜色的代码
2015/08/31 Javascript
Javascript数组循环遍历之forEach详解
2016/11/07 Javascript
BootStrap table删除指定行的注意事项(笔记整理)
2017/02/05 Javascript
bootstrap fileinput 上传插件的基础使用
2017/02/17 Javascript
原生JS改变透明度实现轮播效果
2017/03/24 Javascript
详解AngularJS ng-class样式切换
2017/06/27 Javascript
JavaScript循环_动力节点Java学院整理
2017/06/28 Javascript
js里面的变量范围分享
2020/07/18 Javascript
Python break语句详解
2014/03/11 Python
python机器学习实战之K均值聚类
2017/12/20 Python
python函数式编程学习之yield表达式形式详解
2018/03/25 Python
查找python项目依赖并生成requirements.txt的方法
2018/07/10 Python
解决使用pycharm提交代码时冲突之后文件丢失找回的方法
2018/08/05 Python
python算法题 链表反转详解
2019/07/02 Python
python网络编程之多线程同时接受和发送
2019/09/03 Python
python中的线程threading.Thread()使用详解
2019/12/17 Python
opencv+python实现鼠标点击图像,输出该点的RGB和HSV值
2020/06/02 Python
Fossil美国官网:Fossil手表、手袋、珠宝及配件
2017/02/01 全球购物
乌克兰网上珠宝商店:GoldSoveren
2020/03/31 全球购物
外贸公司实习自我鉴定
2013/09/24 职场文书
职专应届生求职信
2013/11/16 职场文书
档案管理员岗位职责
2013/12/01 职场文书
课堂教学改革实施方案
2014/03/17 职场文书
2014年宣传部个人工作总结
2014/12/06 职场文书
总经理司机岗位职责
2015/04/10 职场文书
python ConfigParser库的使用及遇到的坑
2022/02/12 Python