简单介绍:

说明: Beantalkd是一个高性能,轻量级的分布式消息队列,最初设计目的是想通过后台异步执行耗时任务降低WEB应用页面访问延迟,支持过1000万用户的应用,被豆瓣内部广泛使用,当然还有很多非常优秀的消息队列(http://queues.io/).



几大特性:


1. 支持持久化,默认使用内存,但可启动时-b指定持久化目录,将任务写入Binlog,以相同参数启动会自动恢复Binlog中内容

2. 支持优先级0~2^32,任务优先级越小表示优先级越高,默认优先级为1024

3. 支持超时重发,预设过期时间或TTR时间内如果没有发送delete/release/bury改变任务状态,则认为消息处理失败,把任务交给别的消费者执行

4. 支持任务预留,如果任务因为某些原因无法执行,消费者可以把任务置为buried状态保留这些任务

5.支持分布式,客户端可实现和Memcache一样的分布式,以及根据tube名称去特定的Server获取Job



几点不足:


1. 和memcached类似,依赖libevent单线程事件分发,不能有效利用多核CPU性能,可用多实例部署来解决


基础概念:

消息队列_Beanstalkd-0001.Beanstalkd之轻量级分布式内存队列部署?_Beanstalkd

producer put一个job时,job处于READY状态,等待consumer来处理,如果选择延迟put,job处于DELAYED状态,等待时间过后变为READY状态,consumer获取了当前READY的job后,状态变为RESERVED,可以选择delete,delete后job从队列中删除,之后不能再获取,release后job变为READY状态,其它的consumer可继续获取执行该job,bury后job变为BURIED会将job休眠,等到需要的时候再kick回READY状态,也可以直接delete删除休眠的job

job一个需要异步处理的任务,作为Beanstalkd的基本单元,需要放在一个tube中
tube一个用于异步通信的队列,存储统一类型的任务,是producer和consumer操作的对象
producer一个任务的生产者,通过put将任务放到对应的tube队列
consumer一个任务的消费者,通过reserver/release/bury/delete来获取或改变任务状态台


快速安装:


yum -y install beanstalkd
/etc/init.d/beanstalkd restart


编译安装:


useradd -M -s /sbin/nologin beanstalkd
tar -zxvf beanstalkd-1.10.tar.gz && cd beanstalkd-1.10
make install PREFIX=/xm-workspace/xm-apps/beanstalkd0001
# 创建持久化目录
cd /xm-workspace/xm-apps/beanstalkd0001 && mkdir -p persistent
/etc/init.d/beanstalkd restart


管理工具:

https://github.com/kr/beanstalkd/wiki/Tools#some-community-tools-for-managing-beanstalkd


tar -xvzf beanstool_v0.2.0_linux_amd64.tar.gz
cp beanstool_v0.2.0_linux_amd64/beanstool /xm-workspace/xm-apps/beanstalkd0001/bin/
cd /xm-workspace/xm-apps/beanstalkd0001/bin/ && beanstool stats