消息队列和Celery

天道酬勤

Beanstalkd

Beanstalkd 的特点:

  1. 可持久化。 Beanstalkd 运行使用内存,但也提供了持久性支持。在启动的时候使用 -b 参数指定持久化目录,它会将所有的任务写入 binlog 文件。在发生断电等情况后,用同样的参数指定重启它,将恢复 binlog 中的内容。
  2. 任务超时重发。 消费者必须在预设的 TTR (Time To Run) 时间内发送 delete/release/bury 改变任务状态,否则它会认为消息处理失败,把任务交给别的消费者节点执行。
  3. **支持任务预留。**如果任务因为某些原因无法执行,消费者可以把任务置为 buried 状态保留这些任务。
  4. **支持分布式。**客户端可以实现和 Memcached 一样的分布式。
  5. 灵活设置任务过期和TTR时间。

job

  • job 就是待异步执行的任务,也就是消息,是 Beanstalkd 中的基本单元。一个 job 通过生产者使用 put 命令时创建,然后被放在一个管道(tube)中。在整个生命周期中 job 可能有4个工作状态。
    1. ready: 等待被取出并处理。
    2. reserved: 如果 job 被消费者(worker)取出,将被此消费者预订,消费者将执行 job .
    3. delayed: 等待特定时间之后,状态再改为 ready 状态。
    4. buried: 等待唤醒,通常在 job 处理失败时,会变成这个状态。

Beanstalkc

  • Beanstalkd 借鉴了 Memcached 设计,它们的协议和使用方式的风格很像。本节使用 Beanstalkd 的 Python 客户端 Beanstalkc 演示 Beanstalkd 的用法

pip install PyYAML beanstalkc #安装