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后台程序与Javascript的两种交互方式
Oct 25 PHP
PHP 冒泡排序算法的实现代码
Aug 08 PHP
深入php处理整数函数的详解
Jun 09 PHP
php防止网站被刷新的方法汇总
Dec 01 PHP
ThinkPHP设置禁止百度等搜索引擎转码(简单实用)
Feb 15 PHP
详解php中的implements 使用
Jun 13 PHP
[原创]php token使用与验证示例【测试可用】
Aug 30 PHP
laravel执行php artisan migrate报错的解决方法
Oct 09 PHP
php7 图形用户界面GUI 开发示例
Feb 22 PHP
php使用gearman进行任务分发操作实例详解
Feb 26 PHP
Yii框架安装简明教程
May 15 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
德劲1104的电路分析与改良
2021/03/01 无线电
在Yii2特定页面如何禁用调试工具栏Debug Toolbar详解
2017/08/07 PHP
jquery ui dialog里调用datepicker的问题
2009/08/06 Javascript
Jquery实战_读书笔记2 选择器
2010/01/22 Javascript
新老版本juqery获取radio对象的方法
2010/03/01 Javascript
JS获取select-option-text_value的方法
2013/12/26 Javascript
js使用正则实现ReplaceAll全部替换的方法
2014/08/22 Javascript
javascript实现表单提交后,提交按钮不可用的方法
2015/04/18 Javascript
详解Vue2.0之去掉组件click事件的native修饰
2017/04/20 Javascript
Vue使用json-server进行后端数据模拟功能
2018/04/17 Javascript
vue.js实现标签页切换效果
2018/06/07 Javascript
Vue.js项目中管理每个页面的头部标签的两种方法
2018/06/25 Javascript
jQuery实现监听下拉框选中内容发生改变操作示例
2018/07/13 jQuery
javascript 模块依赖管理的本质深入详解
2020/04/30 Javascript
[05:13]2018DOTA2亚洲邀请赛主赛事第二日战况回顾 LGD、VG双雄携手晋级
2018/04/05 DOTA
python实现bitmap数据结构详解
2014/02/17 Python
python中列表元素连接方法join用法实例
2015/04/07 Python
Python的pycurl包用法简介
2015/11/13 Python
基于Python和Scikit-Learn的机器学习探索
2017/10/16 Python
浅谈Django中的数据库模型类-models.py(一对一的关系)
2018/05/30 Python
Roxy美国官网:澳大利亚冲浪、滑雪健身品牌
2016/07/30 全球购物
NBA欧洲商店(西班牙):NBA Europe Store ES
2019/04/16 全球购物
Yves Rocher捷克官方网站:植物化妆品的创造者
2019/07/31 全球购物
优秀毕业大学生推荐信
2013/11/13 职场文书
建筑工程毕业生自我鉴定
2014/01/14 职场文书
酒店总经理欢迎词
2014/01/15 职场文书
个人简历自我评价
2014/02/02 职场文书
《从现在开始》教学反思
2014/04/15 职场文书
应届生求职信范文
2014/05/26 职场文书
简单租房协议书范本
2014/08/20 职场文书
大学生作弊检讨书
2014/09/11 职场文书
2016年国培研修日志
2015/11/13 职场文书
小学思品教学反思
2016/02/20 职场文书
python面向对象版学生信息管理系统
2021/06/24 Python
php去除数组中为0的元素的实例分析
2021/11/17 PHP
VMware虚拟机安装 Windows Server 2022的详细图文教程
2022/09/23 Servers