Beanstalkd 队列

最后更新于:2022-04-02 02:25:11

[TOC] ## 安装 ### mac `brew install beanstalkd ` ## 启动 `beanstalkd -l 0.0.0.0 -p 11300` * -l 默认为0.0.0.0 * -p 默认为11300 所以等价于 `beanstalkd` ## demo 生产者.php ``` $pheanstalk = Pheanstalk::create('127.0.0.1'); $pheanstalk ->useTube('testtube') ->put("job payload goes here\n"); ``` 消费者.php ``` use Pheanstalk\Pheanstalk; $pheanstalk = Pheanstalk::create('127.0.0.1'); while (true){ $job = $pheanstalk ->watch('testtube') ->reserve(); //默认任务时,阻塞在这里 echo $job->getData(); //删除处理过的数据 $pheanstalk->delete($job); } ``` 先启动`消费者.php`做监听,在执行`生产者.php` ## Beanstalk的特性 1. 优先级(priority) 2. 延迟(delay) 3. 持久化(persistent data) 4. 预留(buried) 5. 任务超时重发(time-to-run) ### Beanstalk的核心元素 * 管道(tube) * 任务(job) ### Beanstalk的任务状态 ready 任务就绪,随时可以被消费 delayed 任务延迟,延迟时间到时进入ready状态 buried 任务预留,此状态会重新进入ready delete 删除任务 reserved 任务正在消费中,此状态可以进入delayed、ready、buried、delete ## 方法 ### 维护方法 stats() 查看队列状态 listTubes() 查看当前所有管道 statsTube(tubeName) 查看指定管道信息 statsJob(job) 查看指定任务信息 ## 使用方法 useTube(tubeName) 指定管道,没有则自动创建 put(Job, [priority]) 添加任务 putInTube(tubeName, Job, [priority]) 同useTube和put组合 delete(job) 删除任务 watch(tubeName) 设置要监听的管道,可以同时设置多个 reserve([time]) 以**阻塞**的方式监听管道,可以设置阻塞时间,不设置默认永久 ignore("default") 忽略默认管道
';