一、Beanstalkd是什么?

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

二、Beanstalkd特性

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

三、Beanstalkd核心元素

生产者 -> 管道(tube) -> 任务(job) -> 消费者

Beanstalkd可以创建多个管道,管道里面存了很多任务,消费者从管道中取出任务进行处理。

四、任务job状态

delayed 延迟状态
ready 准备好状态
reserved 消费者把任务读出来,处理时
buried 预留状态
delete 删除状态

五、安装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);

  

转载于:https://www.cnblogs.com/jkko123/p/8177731.html

Beanstalkd消息队列的安装与使用相关推荐

  1. beanstalkd消息队列在生产环境的应用

    Beanstalkd 是一个高性能的消息队列中间件,本博文宅鸟将介绍一下这个东东的使用. 一.先通过概念让大家了解Beanstalkd的特性和工作场景. Beanstalkd 是一个轻量级消息中间件, ...

  2. kestrel轻量级消息队列的安装

    一简介 1.kestrel是一个轻量级的消息队列框架,总体来说的好处就是轻量,易于使用,但是不太便于管理. 2.现在市面上的消息中间件非常多,比较著名的就是MQ.kestrel对于新应用相对来说用的很 ...

  3. Java应用beanstalkd消息队列

    应用场景 最近做一个项目,处理每一个从队列收到的消息都要去获取一个锁(使用Redis实现的分布式锁),如果没有获取到锁,也不能把这个消息给丢了,那可不可以把这个没有获取到锁的消息再发回队列? 如果是用 ...

  4. PHP消息队列httpsqs安装与使用无错版

    项目网址:http://code.google.com/p/httpsqs/ 使用文档:http://blog.s135.com/httpsqs/ 说明:由于需要安装的东西有些多,原文可能写的有些简略 ...

  5. 基于Swoole和beanstalkd实现多进程处理消息队列。

    2019独角兽企业重金招聘Python工程师标准>>> 项目地址 SWBT框架 https://gitee.com/chenbotome/SWBT 目的 基于Swoole和beans ...

  6. MSMQ消息队列线程使用

    MSMQ消息队列线程使用 接手一新项目,写一个服务.一个线程间断调用webservice返回XML分解放入消息队列中,另一个线程抓消息队列中的消息生成Request调Webservice外发.其中对消 ...

  7. C#调用RabbitMQ实现消息队列

    文章目录 前言 消息队列 准备工作 安装rabbitmq-server RabbitMQ应用 KibaRabbitMQSend KibaRabbitMQReceived 服务器端应用 安装Erlang ...

  8. 消息队列:比较Beanstalkd,IronMQ和Amazon SQS

    介绍 (Introduction) This article introduces the concept of message queues and discusses the strengths ...

  9. 消息队列之----Beanstalkd

    消息队列之----Beanstalkd Beanstalkd 是什么 Beanstalkd,一个高性能.轻量级的分布式内存队列系统 Beanstalkd 特性 优先级(priority) 注:优先级就 ...

最新文章

  1. python类继承实例
  2. python详细安装教程3.8-手把手教你安装Python3.8环境
  3. sed命令详解--转
  4. 一篇文章梳理完虚拟现实相关的核心技术 | 收藏
  5. 从零开始学习docker(三)link
  6. jQuery操作标签--样式、文本、属性操作, 文档处理
  7. php通知多有人,PHP通知抑制;只有某些情况/方法
  8. django配置随时执行的脚本,使用运行时的manage环境执行程序
  9. (转) 淘淘商城系列——redis-desktop-manager的使用
  10. 数字后端基础技能之:CTS(中篇)
  11. 用GibbsLDA做Topic Modeling
  12. badboy linux 版本,jmeter/Badboy安装教程
  13. php搭建简单表格的制作方法,最简单的表格制作方法技巧
  14. 正弦波振荡的常见电路
  15. ASPICE简介及适用范围-亚远景科技
  16. 千万级中文公开免费聊天语料数据分享
  17. Windows NTLM认证
  18. 什么是DDOS流量攻击,DDoS防护手段
  19. 运维小白的python之路(一)
  20. IDEA 控制台窗口双击最大化

热门文章

  1. Pascal 语言中的关键字及保留字
  2. iOS开发之控制器的创建
  3. Word 2010、Excel 2010中插入日期与时间(转)
  4. 【BCS2021】软件供应链完整演讲回看
  5. WebView断网提示
  6. leetcode-40-组合总和 II
  7. create-react-app 自定义 eslint 配置
  8. 大数据||MapReduce编程模板
  9. 杨国勋:云计算颠覆现有市场和产业格局
  10. linux认识第一面