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在Web开发领域的优势
Oct 09 PHP
dedecms中常见问题修改方法总结
Mar 21 PHP
PHP5中Cookie与 Session使用详解
Apr 30 PHP
PHP中对缓冲区的控制实现代码
Sep 29 PHP
PHP Curl出现403错误的解决办法
May 29 PHP
php读取flash文件高宽帧数背景颜色的方法
Jan 06 PHP
PHP基于正则批量替换Img中src内容实现获取缩略图的功能示例
Jun 07 PHP
PHP实现广度优先搜索算法(BFS,Broad First Search)详解
Sep 16 PHP
THINKPHP3.2使用soap连接webservice的解决方法
Dec 13 PHP
PDO::errorCode讲解
Jan 28 PHP
PHP实现的多进程控制demo示例
Jul 22 PHP
Laravel项目中timeAgo字段语言转换的改善方法示例
Sep 16 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中的日期加减方法示例
2014/08/21 PHP
使用YUI+Ant 实现JS CSS压缩
2014/09/02 PHP
php删除指定目录的方法
2015/04/03 PHP
PHP Cookei记录用户历史浏览信息的代码
2016/02/03 PHP
PHP命名空间namespace及use的简单用法分析
2018/08/03 PHP
Centos7安装swoole扩展操作示例
2020/03/26 PHP
PHP设计模式入门之状态模式原理与实现方法分析
2020/04/26 PHP
jQuery easyui datagrid动态查询数据实例讲解
2013/02/26 Javascript
Javascript无阻塞加载具体方式
2013/06/28 Javascript
JQuery设置文本框和密码框得到焦点时的样式
2013/08/30 Javascript
浅析hasOwnProperty方法的应用
2013/11/20 Javascript
关于jquery中全局函数each使用介绍
2013/12/10 Javascript
使用javascript做的一个随机点名程序
2014/02/13 Javascript
js实现checkbox全选和反选示例
2014/05/01 Javascript
javascript中类的定义方式详解(四种方式)
2015/12/22 Javascript
前端性能优化及技巧
2016/05/06 Javascript
zTree树形插件异步加载方法详解
2017/06/14 Javascript
JS常见DOM节点操作示例【创建 ,插入,删除,复制,查找】
2018/05/14 Javascript
JS实现字符串中去除指定子字符串方法分析
2018/05/17 Javascript
vue-router的使用方法及含参数的配置方法
2018/11/13 Javascript
微信小程序实现拍照画布指定区域生成图片
2019/07/18 Javascript
原生js实现的移动端可拖动进度条插件功能详解
2019/08/15 Javascript
谈谈IntersectionObserver懒加载的具体使用
2019/10/15 Javascript
JavaScript Canvas编写炫彩的网页时钟
2019/10/16 Javascript
vue 实现cli3.0中使用proxy进行代理转发
2019/10/30 Javascript
JavaScript对象原型链原理解析
2020/01/22 Javascript
Django中cookie的基本使用方法示例
2018/02/03 Python
对dataframe进行列相加,行相加的实例
2018/06/08 Python
python中的不可变数据类型与可变数据类型详解
2018/09/16 Python
德国箱包网上商店:koffer24.de
2016/07/27 全球购物
美国殿堂级滑板、冲浪、滑雪服装品牌:Volcom(钻石)
2017/04/20 全球购物
意大利简约的休闲品牌:Aspesi
2018/02/08 全球购物
船餐厅和泰晤士河餐饮游轮:Bateaux London
2018/03/19 全球购物
欧洲最大的拼图游戏商店:JigsawPuzzle.co.uk
2018/07/04 全球购物
给孩子的新年寄语
2014/04/08 职场文书
table设置超出部分隐藏,鼠标移上去显示全部内容的方法
2022/12/24 HTML / CSS