beanstalkd-基本概念

在beanstalkd中包含几个重要的概念,如下图所示,对于一个系统消息队列系统来说 其必定有 - 一个或多个生产者(Producter), - 一个或多个消费者(Customer), - 一个消息存储系统,在这里指的是beanstalkd

对于beanstalkd来说,以管道(Tube)作为其主要的组成部分,一个beanstalkd可以包含一个或者多个管道

beanstalkd

对于Tube而言,有两个队列组成,ready queuedelay queue,每一个队列里面可以包含零个或者多个任务

beanstalkd

对于队列中的任务而言,我们更加关注的是任务的状态,因此在beanstalkd中的任务包含一下四中状态 ready, reserved, delayed,buried

beanstalkd

  1. 由上面的流程图可以看到,生成任务时,可以将任务设置成立即执行(ready)或者延迟执行(delayed)

  2. 对于延迟任务而言,延迟时间到了以后,其状态变更为立即执行状态

  3. 只有在立即执行状态下的任务,才能被消费者消费

  4. 处于立即执行状态下的任务,被消费者获取以后,其状态变成正在处理中(reserved)

  5. 当任务处理完以后,有四种处理方式删除,重新投递到立即执行队列,投递到延迟队列以及不做任何处理

  6. 当不对已完成任务做任何处理时,其对消费者属于不可见状态,直到其被重新投递到ready队列中,或者被删除

   put with delay               release with delay
  ----------------> [DELAYED] <------------.
                        |                   |
                        | (time passes)     |
                        |                   |
   put                  v     reserve       |       delete
  -----------------> [READY] ---------> [RESERVED] --------> *poof*
                       ^  ^                |  |
                       |   \  release      |  |
                       |    `-------------'   |
                       |                      |
                       | kick                 |
                       |                      |
                       |       bury           |
                    [BURIED] <---------------'
                       |
                       |  delete
                        `--------> *poof*