文档章节

轻量级消息队列benastalkd

tanjj
 tanjj
发布于 2016/10/25 16:09
字数 736
阅读 692
收藏 16

Beanstalkd设计里面的核心概念:

◆ job

一个需要异步处理的任务,是Beanstalkd中的基本单元,需要放在一个tube中。

◆ tube

一个有名的任务队列,用来存储统一类型的job,是producer和consumer操作的对象。

◆ producer

Job的生产者,通过put命令来将一个job放到一个tube中。

◆ consumer

Job的消费者,通过reserve/release/bury/delete命令来获取job或改变job的状态。 Beanstalkd中一个job的生命周期如图所示。一个job有READY, RESERVED, DELAYED, BURIED四种状态。当producer直接put一个job时,job就处于READY状态,等待consumer来处理,如果选择延迟put,job就先到DELAYED状态,等待时间过后才迁移到READY状态。consumer获取了当前READY的job后,该job的状态就迁移到RESERVED,这样其他的consumer就不能再操作该job。当consumer完成该job后,可以选择delete, release或者bury操作;delete之后,job从系统消亡,之后不能再获取;release操作可以重新把该job状态迁移回READY(也可以延迟该状态迁移操作),使其他的consumer可以继续获取和执行该job;有意思的是bury操作,可以把该job休眠,等到需要的时候,再将休眠的job kick回READY状态,也可以delete BURIED状态的job。正是有这些有趣的操作和状态,才可以基于此做出很多意思的应用,比如要实现一个循环队列,就可以将RESERVED状态的job休眠掉,等没有READY状态的job时再将BURIED状态的job一次性kick回READY状态。

一、安装beanstalkd

sudo apt-get install beanstalkd

源码安装 tar -zxvf /usr/bin/beanstalkd/beanstalkd-1.9.tar.gz cd beanstalkd make install PERFIX=/usr/bin/beanstalkd

后台启动:

beanstalkd -l 地址 -p 端口号 -z 最大的任务大小(byte) -c &

ps:如果是外部客户端连接,ip地址要写外网地址,这样才能连接上

例:/usr/bin/beanstalkd -l 192.168.50.233 -p 11311

二、示例

//1.链接benstalkd
require 'beanstalkd.php';
$baenstalkd=new beanstalkd();
$pheanstalk=$baenstalkd->getBeanstalkd('192.168.50.233','11311');
$tube='test';//tube名
//2.生产任务
$info=array('name'=>'tjj','sex'=>'男');
$ret=$baenstalkd->send2queue($pheanstalk,$tube,json_encode($info));//發送消息队列

//2.消费(处理任务) //消費队列消息

while($job=$pheanstalk->watch($tube)->ignore('default')->reserve()){
    $ret=$job->getData();
    var_dump($ret);
    $pheanstalk->delete($job);
    
}

三、上述代码下载https://git.oschina.net/tanjiajun/share.git

© 著作权归作者所有

tanjj
粉丝 18
博文 28
码字总数 29300
作品 0
广州
程序员
私信 提问
PHP memcache实现消息队列实例

现在memcache在服务器缓存应用比较广泛,下面我来介绍memcache实现消息队列等待的一个例子,有需要了解的朋友可参考。 memche消息队列的原理就是在key上做文章,用以做一个连续的数字加上前缀...

tiger_lee
2014/03/13
574
0
kater/message-trunk

message-trunk ==================== message-trunk是基于java开发的轻量级消息总线框架。 框架开发宗旨:项目内的轻量级消息队列。 框架开发目的:在项目内部,我们常常需要做异步操作,常规...

kater
2017/03/14
0
0
一个分布式java爬虫框架JLiteSpider

A lite distributed Java spider framework. 这是一个轻量级的分布式java爬虫框架 特点 这是一个强大,但又轻量级的分布式爬虫框架。jlitespider天生具有分布式的特点,各个worker之间需要通...

Mr_zebra
2018/09/28
34
0
用redis实现消息队列(实时消费+ack机制)

消息队列 首先做简单的引入。 MQ主要是用来: 解耦应用、 异步化消息 流量削峰填谷 目前使用的较多的有ActiveMQ、RabbitMQ、ZeroMQ、Kafka、MetaMQ、RocketMQ等。 网上的资源对各种情况都有详...

美的让人心动
2018/05/03
39
0
MisterQ Explorer

MisterQ Explorer 是一个轻量级的用来查看 IBM WebSphere MQ队列、频道和消息的工具,是一个独立的RCP应用,无需依赖Eclipse安装,主要功能有: 创建多个队列管理器的配置和连接 队列和频道的...

匿名
2011/01/04
756
0

没有更多内容

加载失败,请刷新页面

加载更多

iOS苹果应用IPA一键签名工具及重签教程

开心签名工具,是一款跨平台ios签名和重签名工具。 同时支持在windows、linux、mac运行,数据同步,方便使用及管理! 开心重签名工具官网 功能特点 1、支持图形界面及命令行重签(部署到服务...

tintong
17分钟前
3
0
2.4G有源卡核心芯片供应商

有源2.4G RFID的防盗标签,在与无源标签相比较,通信距离远,通信时效高。我司的SI24R2E这颗芯片专门为2.4G有源标签而设计,具有低功耗,发送距离远,厂商设计简单等优势;广泛应用于现在城市...

文刀石
22分钟前
2
0
设置Ubuntu16.04启动为命令行界面

1. 修改/etc/default/grub文件,将GRUB_CMDLINE_LINUX_DEFAULT设置成”quiet splash 3” 2. 使用命令update-grub使得在/boot下重新生成GRUB2配置文件。 3. 重启...

JosiahMg
23分钟前
3
0
C++基础知识点

计算机语言 计算机不能理解高级语言,只能理解机器语言,必须要将高级语言翻译成机器语言,翻译的方式有两种,一种是编译,一种是解释 解释型语言,在运行程序时进行翻译,每个语句在执行时逐...

大瑞清_liurq
29分钟前
2
0
EFCore 多条数据更新不能同时savechanges()的解决方法

1 在ModelContext定义下增加var transaction = ctx.Database.BeginTransaction(); 1.2 在最后一个SaveChanges()后增加transaction.Commit(); 3 在finally的if (sMsgCode != "")分支中增加tra......

_Somuns
32分钟前
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部