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 htmlentities和htmlspecialchars 的区别
Aug 18 PHP
PHP5函数小全(分享)
Jun 06 PHP
php判断是否为json格式的方法
Mar 04 PHP
教你如何用php实现LOL数据远程获取
Jun 10 PHP
ECshop 迁移到 PHP7版本时遇到的兼容性问题
Feb 15 PHP
PHPCMS V9 添加二级导航的思路详解
Oct 20 PHP
10个值得深思的PHP面试题
Nov 14 PHP
探究Laravel使用env函数读取环境变量为null的问题
Dec 06 PHP
ThinkPHP框架分布式数据库连接方法详解
Mar 14 PHP
ThinkPHP框架中使用Memcached缓存数据的方法
Mar 31 PHP
PHP+MySQL实现消息队列的方法分析
May 09 PHP
redis+php实现微博(二)发布与关注功能详解
Sep 23 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实现批量查询清除一句话后门的代码
2008/01/20 PHP
PHP数组操作汇总 php数组的使用技巧
2011/07/17 PHP
ThinkPHP3.1基础知识快速入门
2014/06/19 PHP
Laravel框架中实现使用阿里云ACE缓存服务
2015/02/10 PHP
PHP基于单例模式编写PDO类的方法
2016/09/13 PHP
javascript之锁定表格栏位
2007/06/29 Javascript
js跳转页面方法实现汇总
2014/02/11 Javascript
自己封装的javascript事件队列函数版
2014/06/12 Javascript
Jquery实现仿京东商城省市联动菜单
2015/11/19 Javascript
jQuery实现分隔条左右拖动功能
2015/11/21 Javascript
AngularJS 2.0新特性有哪些
2016/02/18 Javascript
jQuery 常用代码集锦(必看篇)
2016/05/16 Javascript
浅谈jQuery绑定事件会叠加的解决方法和心得总结
2016/10/26 Javascript
完美解决jQuery 鼠标快速滑过后,会执行多次滑出的问题
2016/12/08 Javascript
AngulerJS学习之按需动态加载文件
2017/02/13 Javascript
JavaScript实现向select下拉框中添加和删除元素的方法
2017/03/07 Javascript
Webpack如何引入bootstrap的方法
2017/06/17 Javascript
微信小程序实现打开内置地图功能【附源码下载】
2017/12/07 Javascript
[39:53]完美世界DOTA2联赛PWL S2 LBZS vs Forest 第一场 11.19
2020/11/19 DOTA
[07:25]DOTA2-DPC中国联赛2月5日Recap集锦
2021/03/11 DOTA
PyQt5每天必学之QSplitter实现窗口分隔
2018/04/19 Python
python读取大文件越来越慢的原因与解决
2019/08/08 Python
Python实现初始化不同的变量类型为空值
2020/06/02 Python
Python基于内置函数type创建新类型
2020/10/22 Python
CSS3解决移动页面上点击链接触发色块的问题
2016/06/03 HTML / CSS
世界上最大的曲棍球商店:Pro Hockey Life
2017/10/30 全球购物
Nº21官方在线商店:numeroventuno.com
2019/09/26 全球购物
小学清明节活动方案
2014/03/08 职场文书
签约仪式主持词
2014/03/19 职场文书
材料成型及控制工程专业求职信
2014/06/19 职场文书
班子四风对照检查材料
2014/08/21 职场文书
鸡毛信观后感
2015/06/11 职场文书
毕业典礼致辞
2015/07/29 职场文书
OpenCV3.3+Python3.6实现图片高斯模糊
2021/05/18 Python
解决pycharm安装scrapy DLL load failed:找不到指定的程序的问题
2021/06/08 Python
MySQL创建管理RANGE分区
2022/04/13 MySQL