Beanstalkd
Beanstalkd 的特点:
- 可持久化。 Beanstalkd 运行使用内存,但也提供了持久性支持。在启动的时候使用
-b
参数指定持久化目录,它会将所有的任务写入 binlog 文件。在发生断电等情况后,用同样的参数指定重启它,将恢复 binlog 中的内容。
- 任务超时重发。 消费者必须在预设的 TTR (Time To Run) 时间内发送 delete/release/bury 改变任务状态,否则它会认为消息处理失败,把任务交给别的消费者节点执行。
- **支持任务预留。**如果任务因为某些原因无法执行,消费者可以把任务置为 buried 状态保留这些任务。
- **支持分布式。**客户端可以实现和 Memcached 一样的分布式。
- 灵活设置任务过期和TTR时间。
job
- job 就是待异步执行的任务,也就是消息,是 Beanstalkd 中的基本单元。一个 job 通过生产者使用 put 命令时创建,然后被放在一个管道(tube)中。在整个生命周期中 job 可能有4个工作状态。
- ready: 等待被取出并处理。
- reserved: 如果 job 被消费者(worker)取出,将被此消费者预订,消费者将执行 job .
- delayed: 等待特定时间之后,状态再改为 ready 状态。
- buried: 等待唤醒,通常在 job 处理失败时,会变成这个状态。
Beanstalkc
- Beanstalkd 借鉴了 Memcached 设计,它们的协议和使用方式的风格很像。本节使用 Beanstalkd 的 Python 客户端 Beanstalkc 演示 Beanstalkd 的用法
pip install PyYAML beanstalkc #安装