beanstalkd队列

Beanstalkd是一个高性能,轻量级的分布式内存服务。它的接口是通用的,旨在通过异步运行耗时的任务来减少大容量Web应用程序中页面视图的延迟。

启动时,beanstalkd打开一个套接字并侦听传入的连接。对于每个连接,它都会读取一系列命令来创建,保留,删除和以其他方式操纵要完成的工作单元“作业”。

运行参数

-b <dir>
    binlog的目录,持久化数据,重启自动读取
-d
    后台执行beanstalkd
-f <ms>
    每<ms>毫秒最多调用一次fsync(2)。这将减少磁盘活动并以安全为代价提高速度。断电可能会导致最多丢失<ms>毫秒的历史记录
-F
    从不调用fsync(2)
-h
    帮助
-l <addr>
    监听的地址, 默认0.0.0.0
-p <port>
    监听的端口,默认11300
-s <bytes>
    每个binlog文件的最大大小(以字节为单位)
-u <user>
    运行的用户
-z <bytes>
    作业的最大大小(以字节为单位)

JOB

Job是队列中一个基本单元,Job 可能有四个工作状态:ready、reserved、delayed、buried.

job 的生命周期

Status Description
ready 等待被取出并处理
reserved 如果 job 被 worker 取出,将被此 worker 预订,worker 将执行此 job
delayed 等待特定时间之后,状态再迁移为 ready 状态
buried 等待唤醒,通常在 job 处理失败时进入该状态

job 可能的状态迁移


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

## 应用场景
![](http://www.11meigui.com/wp-content/uploads/2019/12/beanstalkd.png)
PHP Deployer入门
php反射机制