美文网首页PHP开发我用 Linux互联网科技
小、巧、快消息队列组件beanstalkd

小、巧、快消息队列组件beanstalkd

作者: 枫凝_a19e | 来源:发表于2018-03-14 15:20 被阅读19次

一、简介:

1、Beanstalkd是什么?

Beanstalkd是一个高性能,轻量级的分布式内存队列

2、Beanstalkd特性
  1. 支持优先级(支持任务插队)
  2. 延迟(实现定时任务)
  3. 持久化(定时把内存中的数据刷到binlog日志)
  4. 预留(把任务设置成预留,消费者无法取出任务,等某个合适时机再拿出来处理)
  5. 任务超时重发(消费者必须在指定时间内处理任务,如果没有则认为任务失败,重新进入队列)

上面介绍那么多个特性中,跟redis或者mysql中实现的消息队列的方法比较,其中最大特点就是可以实现优先级,还有定时执行

二、安装

1、系统环境centos6
rpm -Uvh http://download.fedoraproject.org/pub/epel/6/i386/epel-release-6-8.noarch.rpm  #安装额外的库 
yum install beanstalkd --enablerepo=epel
2、启动beanstalkd
/usr/bin/beanstalkd -l 0.0.0.0 -p 11300 -b /var/lib/beanstalkd/binlog -F

三、php客户端调用

1、安装composer
> curl -sS https://getcomposer.org/installer | php
> mv composer.phar /usr/local/bin/composer
#墙内配置下源
>composer config -g repo.packagist composer https://packagist.phpcomposer.com
> composer require pda/pheanstalk
2、常用方法
2.1、维护方法
stats() 查看状态方法
listTubes() 目前存在的管道
listTubesWatched() 目前监听的管道
statsTube() 管道的状态
useTube() 指定使用的管道
statsJob() 查看任务的详细信息
peek() 通过任务ID获取任务
2.2、生产者方法
putInTube() 往管道中写入数据
put() 配合useTube()使用
2.3、消费者方法
watch() 监听管道,可以同时监听多个管道
ignore() 不监听管道
reserve() 以阻塞方式监听管道,获取任务
reserveFromTube() 
release() 把任务重新放回管道
bury() 把任务预留
peekBuried() 把预留任务读取出来
kickJob() 把buried状态的任务设置成ready
kick() 批量把buried状态的任务设置成ready
peekReady() 把准备好的任务读取出来
peekDelayed() 把延迟的任务读取出来
pauseTube() 给管道设置延迟
resumeTube() 取消管道延迟
touch() 让任务重新计算ttr时间,给任务续命
3、具体简单使用

查看信息,新建info.php

<?php
require './vendor/autoload.php';

use Pheanstalk\Pheanstalk;

$p = new Pheanstalk('127.0.0.1', 11300);
//查看beanstalkd当前的状态信息
var_dump($p->stats());

结果:

image

生产者producer.php代码如下:

<?php
require './vendor/autoload.php';

use Pheanstalk\Pheanstalk;

//创建一个Pheanstalk对象
$p = new Pheanstalk('127.0.0.1', 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));

结果:

image

消费者consumer.php代码如下:

<?php
require './vendor/autoload.php';

use Pheanstalk\Pheanstalk;

//创建一个Pheanstalk对象
$p = new Pheanstalk('127.0.0.1', 11300);

//监听userReg管道,忽略default管道
$job = $p->watch('userReg')->ignore('default')->reserve();

$data = json_decode($job->getData());
//打印任务中的数据
print_r($data);

//最后删除任务,表示任务处理完成
$p->delete($job);

结果:

image

参考:

官网

https://segmentfault.com/a/1190000002784775

https://www.cnblogs.com/mangoVic/p/6198077.html

https://github.com/pda/pheanstalk/

中文文档

beanstalkd分享pdf文档

相关文章

  • 小、巧、快消息队列组件beanstalkd

    一、简介: 1、Beanstalkd是什么? Beanstalkd是一个高性能,轻量级的分布式内存队列 2、Bea...

  • beanstalkd消息队列

    介绍: Beanstalkd,一个高性能、轻量级的分布式内存队列系统,最初设计的目的是想通过后台异步执行耗时的任务...

  • Laravel消息队列

    Laravel消息队列## 本文所讲的消息队列是基于Beanstalkd的,一些繁重的任务可以放到消息队列里,后台...

  • Beanstalkd+Supervisor构建消息队列

    1、Beanstalkd Beanstalkd,一个高性能、轻量级的分布式内存队列系统,最初设计的目的是想通过后台...

  • PHP消息队列实践 beanstalkd、kafka

    一·beanstalkd 1.特点优先级(支持任务插队),延迟(delayed 写入队列延迟几秒后才可使用),持久...

  • beanstalkd队列

    数据结构里面的队列是先进先出的数据结构,在服务器开发中使用队列可以有效的实现任务的异步处理,把耗时的任务放在一个队...

  • swoole进程池中使用beanstalkd,异步处理任务

    beanstalkd的优缺点: 优点: 1.beanstalkd是基于内存的任务队列,性能较高。每个job有多种状...

  • Python 使用 Beanstalkd 做异步任务处理

    使用 Beanstalkd 作为消息队列服务,然后结合 Python 的装饰器语法实现一个简单的异步任务处理工具....

  • Kafka

    消息队列是分布式架构的基础组件,掌握这类组件是必要的,kafka是其中的典型代表。 消息队列 消息队列的电信原型就...

  • backburner队列简介

    特点: 基于beanstalkd, facebook app cause 使用的队列, 9.5 million用户...

网友评论

    本文标题:小、巧、快消息队列组件beanstalkd

    本文链接:https://www.haomeiwen.com/subject/xbmfqftx.html