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来处理多个提交任务
Oct 09 PHP
php 字符转义 注意事项
May 27 PHP
php与paypal整合方法
Nov 28 PHP
一个基于PDO的数据库操作类
Mar 24 PHP
PHP文件打开、关闭、写入的判断与执行代码
May 24 PHP
php gzip压缩输出的实现方法
Apr 27 PHP
Zend的Registry机制的使用说明
May 02 PHP
laravel容器延迟加载以及auth扩展详解
Mar 02 PHP
php实现的简单检验登陆类
Jun 18 PHP
php强大的时间转换函数strtotime
Feb 18 PHP
php实现有序数组打印或排序的方法【附Python、C及Go语言实现代码】
Nov 10 PHP
laravel 解决后端无法获取到前端Post过来的值问题
Oct 22 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
德生H-501的评价与改造
2021/03/02 无线电
构建简单的Webmail系统
2006/10/09 PHP
php遍历目录viewDir函数
2009/12/15 PHP
PHP的一个基础知识 表单提交
2011/07/04 PHP
Symfony2使用Doctrine进行数据库查询方法实例总结
2016/03/18 PHP
Laravel框架自定义验证过程实例分析
2019/02/01 PHP
PHP 8新特性简介
2020/08/18 PHP
走出JavaScript初学困境—js初学
2008/12/29 Javascript
javascript获得CheckBoxList选中的数量
2009/10/27 Javascript
jquery插件tooltipv顶部淡入淡出效果使用示例
2013/12/05 Javascript
js控制多图左右滚动切换效果代码分享
2015/08/26 Javascript
Extjs实现下拉菜单效果
2016/04/01 Javascript
jQuery右下角悬浮广告实例
2016/10/17 Javascript
jQuery的中 is(':visible') 解析及用法(必看)
2017/02/12 Javascript
nodejs高大上的部署方式(PM2)
2018/09/11 NodeJs
js实现随机数小游戏
2019/06/28 Javascript
如何阻止小程序遮罩层下方图层滚动
2019/09/05 Javascript
react quill中图片上传由默认转成base64改成上传到服务器的方法
2019/10/30 Javascript
webpack proxy 使用(代理的使用)
2020/01/10 Javascript
es6数组的flat(),flatMap()函数用法实例分析
2020/04/18 Javascript
详解vue 组件
2020/06/11 Javascript
解决Element中el-date-picker组件不回填的情况
2020/11/07 Javascript
[02:15]你好,这就是DOTA!
2015/08/05 DOTA
在Python的Django框架中用流响应生成CSV文件的教程
2015/05/02 Python
浅谈Python反射 &amp; 单例模式
2019/03/21 Python
django迁移文件migrations的实现
2020/03/31 Python
python和C++共享内存传输图像的示例
2020/10/27 Python
css3学习心得分享
2013/08/19 HTML / CSS
艺龙旅行网酒店预订:国内、港澳台酒店
2018/06/26 全球购物
耐克波兰官方网站:Nike波兰
2019/09/03 全球购物
2013届毕业生求职信范文
2013/11/20 职场文书
幼儿园教师节活动方案
2014/02/02 职场文书
个人遵守党的政治纪律情况对照检查材料
2014/09/26 职场文书
群众路线教育实践活动整改落实情况汇报
2014/10/28 职场文书
倡议书范文大全
2015/04/28 职场文书
好员工观后感
2015/06/17 职场文书