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") 忽略默认管道
';