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获取用户的浏览器与操作系统信息的代码
Sep 04 PHP
可以保证单词完整性的PHP英文字符串截取代码分享
Jul 15 PHP
php中ftp_chdir与ftp_cdup函数用法
Nov 18 PHP
PHP中创建和验证哈希的简单方法实探
Jul 06 PHP
详解PHP实现执行定时任务
Dec 21 PHP
php实现XML和数组的相互转化功能示例
Feb 08 PHP
PHP实现的文件上传类与用法详解
Jul 05 PHP
PHP实现的基于单向链表解决约瑟夫环问题示例
Sep 30 PHP
laravel migrate初学常见错误的解决方法
Oct 11 PHP
ThinkPHP6.0如何利用自定义验证规则规范的实现登陆
Dec 16 PHP
swoole锁的机制代码实例讲解
Mar 04 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
Terran兵种对照表
2020/03/14 星际争霸
PHP 魔术函数使用说明
2010/05/14 PHP
php去除换行符的方法小结(PHP_EOL变量的使用)
2013/02/16 PHP
php计算程序运行时间的简单例子分享
2014/05/10 PHP
php实现每天自动变换随机问候语的方法
2015/05/12 PHP
分享Javascript中最常用的55个经典小技巧
2013/11/29 Javascript
javascripit实现密码强度检测代码分享
2013/12/12 Javascript
js中setTimeout()与clearTimeout()用法实例浅析
2015/05/12 Javascript
javascript与jquery中的this关键字用法实例分析
2015/12/24 Javascript
Bootstrap Metronic完全响应式管理模板之菜单栏学习笔记
2016/07/08 Javascript
Javascript 函数的四种调用模式
2016/11/05 Javascript
jQuery插件zTree实现的基本树与节点获取操作示例
2017/03/08 Javascript
inner join 内联与left join 左联的实例代码
2017/09/18 Javascript
详解Node.js 中使用 ECDSA 签名遇到的坑
2018/11/26 Javascript
JavaScript实现的3D旋转魔方动画效果实例代码
2019/07/31 Javascript
解决vue的过渡动画无法正常实现问题
2019/10/31 Javascript
你可能从未使用过的11+个JavaScript特性(小结)
2020/01/08 Javascript
jQuery表单校验插件validator使用方法详解
2020/02/18 jQuery
[01:00:14]DOTA2官方TI8总决赛纪录片 真视界True Sight
2019/01/16 DOTA
简单介绍Python中的几种数据类型
2016/01/02 Python
浅谈Python 集合(set)类型的操作——并交差
2016/06/30 Python
Python错误提示:[Errno 24] Too many open files的分析与解决
2017/02/16 Python
利用Python读取文件的四种不同方法比对
2017/05/18 Python
TensorFlow keras卷积神经网络 添加L2正则化方式
2020/05/22 Python
英国快时尚女装购物网站:PrettyLittleThing
2018/08/15 全球购物
Farfetch中文官网:奢侈品牌时尚购物平台
2020/03/15 全球购物
美体小铺法国官方网站:The Body Shop法国
2020/06/04 全球购物
会计实习生自我鉴定
2013/12/12 职场文书
经典促销广告词大全
2014/03/19 职场文书
岗位竞聘书范文
2014/03/31 职场文书
关于教师节的演讲稿
2014/09/04 职场文书
2014年志愿者工作总结
2014/11/20 职场文书
nginx配置ssl实现https的方法示例
2021/03/31 Servers
使用react+redux实现计数器功能及遇到问题
2021/06/02 Javascript
Python中递归以及递归遍历目录详解
2021/10/24 Python
java实现自定义时钟并实现走时功能
2022/06/21 Java/Android