beanstalkd

Wed 11 August 2010
  • 装备 tags:
  • foss
  • opensource published: true comments: true

beanstalkd是一个极轻量级的消息队列服务,作者的说法叫做Work Queue。

概念

Beanstalkd里包含以下几个概念:

  • Producer
  • Worker
  • Job
  • Tube

Producer 与传统的消息队列服务中的概念类似,是Job的生产者。这个角色通过put命令来创建Job。

Worker 即消费者,worker通过reserve / release / bury / delete 等命令操作job的生命周期。

Job 是beanstalkd中的基本单元,一个job包含id和body,从属于一个tube。Job的生命周期是beanstalkd中的核心概念,它包含DELAYED / READY / RESERVED / BURIED / DELETED等状态。beanstalkd文档中的这个图对Job的声明周期进行了说明: http://github.com/kr/beanstalkd/blob/master/doc/protocol.txt#L81

Tube 是类似namespace的概念,Producer在生产Job前通过use指定相应的Tube。而Worker通过watch / Ignore命令来决定从哪些Tube中获得Job。

安装

Beanstalkd 可以通过很多Linux发行版的包管理器直接安装。依赖libevent 1.4.1 以上版本。
通过以下命令启动即可

beanstalkd -d -p <PORT>

协议

Beanstalkd在各方面都继承memcached的风格,协议也与memcached类似,同样是基于文本的:

命令 参数 [参数...] [命令体字节数]\r\n
[命令体]\r\n

beanstalkd很多命令的返回是yaml格式,但是系统对命令体的格式并没有限制。

客户端

Beanstalkd协议见简单,有各种语言的客户端实现。python有一个非常简单的beanstalkc,可以通过easy_install安装。不过,这个客户端缺少断线重连机制,正式发布的0.2.0版本也有一些严重的bug。可以从github上下载源代码安装,并在使用时控制重连。

The post is brought to you by lekhonee v0.7