这是 FaceBook 实现的一个消息队列,其协议是基于 ASCII 的,上报的数据可以通过 binlog 进行持久化,其高可用类似于 Memcached 的方式,也就是各个进程之间不知道相互的存在。
支持优先级、延时、超时重发、预留等机制,支持分布式的后台任务和定时任务处理。
这里简单介绍其使用方法。
Beanstalk
简单介绍其常用概念:
- JOB 一个需要异步处理的任务,作为基本单元,属于其中的某个 Tube ;
- Tube 任务队列,类似于 Kafka 的 Topic,用于存储同一类型的任务,每个 Tube 由一个就绪队列和延迟队列组成,每个 Job 的所有状态迁移在对应的 Tube 中完成。
Tube 会按需求创建,当其变为空 (No ready/delayed/buried jobs) 且没有任何客户端引用是,将会被自动删除。
任务的生命周期
----- 正常生命周期
put reserve delete
-----> [READY] ---------> [RESERVED] --------> *poof*
put with delay release with delay
----------------> [DELAYED] <------------.
| |
kick | (time passes) |
| |
put v reserve | delete
-----------------> [READY] ---------> [RESERVED] --------> *poof*
^ ^ | |
| \ release | |
| `-------------' |
| |
| kick |
| |
| bury |
[BURIED] <---------------'
|
| delete
`--------> *poof*
Tubes
一个服务器有一个或者多个 tubes,用来储存统一类型的 job 。
常用命令
----- 链接到DB
$ telnet 127.0.0.1 11300
----- 查看tubes
$ list-tubes
$ list-tube-used
$ list-tubes-watched
参考
官网 beanstalkd 及其中文协议的结合 Beanstalkd中文协议。