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实现的仿阿里巴巴实现同类产品翻页
Dec 11 PHP
php程序效率优化的一些策略小结
Jul 17 PHP
PHP反转字符串函数strrev()函数的用法
Feb 04 PHP
php file_get_contents抓取Gzip网页乱码的三种解决方法
Nov 12 PHP
使用PHP生成二维码的两种方法(带logo图像)
Mar 14 PHP
PHP include任意文件或URL介绍
Apr 29 PHP
PHP模拟QQ登录的方法
Jul 29 PHP
PHP 绘制网站登录首页图片验证码
Apr 12 PHP
php分页查询mysql结果的base64处理方法示例
May 18 PHP
PHP截取发动短信内容的方法
Jul 04 PHP
掌握PHP垃圾回收机制详解
Mar 13 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的Yii框架中cookie和session功能的相关操作
2016/03/17 PHP
PHP魔术方法之__call与__callStatic使用方法
2017/07/23 PHP
jQuery渐变发光导航菜单的实例代码
2013/03/27 Javascript
js模拟C#中List的简单实例
2014/03/06 Javascript
NodeJS学习笔记之Connect中间件模块(一)
2015/01/27 NodeJs
JavaScript入门基础
2015/08/12 Javascript
详解Node.js如何开发命令行工具
2016/08/14 Javascript
JavaScript实现同一个页面打开多张图片
2016/12/29 Javascript
浅谈如何通过node.js对数据进行MD5加密
2018/05/16 Javascript
在vue中多次调用同一个定义全局变量的实例
2018/09/25 Javascript
Vue中computed、methods与watch的区别总结
2019/04/10 Javascript
layui 富文本赋值,取值,取纯文本值的实例
2019/09/18 Javascript
js中addEventListener()与removeEventListener()用法案例分析
2020/03/02 Javascript
微信小程序tab左右滑动切换功能的实现代码
2021/02/08 Javascript
Python的Django框架中的Context使用
2015/07/15 Python
Python找出最小的K个数实例代码
2018/01/04 Python
Python封装原理与实现方法详解
2018/08/28 Python
Python检测数据类型的方法总结
2019/05/20 Python
如何爬取通过ajax加载数据的网站
2019/08/15 Python
解决django无法访问本地static文件(js,css,img)网页里js,cs都加载不了
2020/04/07 Python
keras 获取某层的输入/输出 tensor 尺寸操作
2020/06/10 Python
纯CSS3实现绘制各种图形实现代码详细整理
2012/12/26 HTML / CSS
用纯css3实现的图片放大镜特效效果非常不错
2014/09/02 HTML / CSS
局域网标准
2016/09/10 面试题
应届生财务管理求职信
2013/11/06 职场文书
军训 自我鉴定
2014/02/03 职场文书
《维生素c的故事》教学反思
2014/02/18 职场文书
感恩母亲节活动方案
2014/03/04 职场文书
年度考核自我鉴定
2014/03/19 职场文书
学生个人自我鉴定范文
2014/03/28 职场文书
某某同志考察材料
2014/05/28 职场文书
建筑安全责任书范本
2014/07/24 职场文书
2014个人四风对照检查材料思想汇报
2014/09/18 职场文书
机关中层领导干部群众路线教育实践活动个人对照检查材料
2014/09/24 职场文书
Mysql数据库事务的脏读幻读及不可重复读详解
2022/05/30 MySQL
css之clearfix的用法深入理解(必看篇)
2023/05/21 HTML / CSS