tube:一个行列步队,用来存放job,相称于一个主题(topic),是producer和consumer操作的工具
producer:生产者,发布任务的人,通过put命令来将一个job放到一个tube中
consumer:消费者,处理任务的人,通过reserve/release/bury/delete命令来获取job或改变job的状态

producer生产出一个job,放在tube中,consumer监听着tube,一旦有job任务,就将其取出进行业务处理,然后改变job的状态
Job的四种状态:ready:生产者put一个job后,job便是ready,表示该job随时可以被消费者消费
reserved:job正在被处理
delayed:job被延迟,延迟韶光到了之后,job将变成ready状态供消费者消费
buried:job任务由于某些条件限定而被暂放一边,等条件知足再连续处理
特性优先级:支持设置job的优先级,值越小,优先级越高,默认优先级为1024
持久化:可以通过binlog将job及其状态记录到文件里面,在Beanstalkd下次启动时可以通过读取binlog来规复之前的job及状态。
超时掌握:为了防止某个consumer永劫光占用任务但不能处理的情形,Beanstalkd为reserve操作设置了timeout韶光,如果该consumer不能在指定时间内完成job,job将被迁移回READY状态,供其他consumer实行
不敷在利用中创造一个Beanstalkd尚无供应删除一个tube的操作,只能将tube的job依次删除,并让Beanstalkd来自动删除空tube
Beanstalkd不支持客户端认证机制,开拓者将运用处景定位在局域网
安装与利用ubuntu安装beanstalkd
apt-get install beanstalkd1
启动
beanstalkd -l 127.0.0.1 -p 11300 -b /var/log/beanstalkd/binlog1
-b 参数置顶binlog文件路径,断电后重启会自动规复任务。
也可以利用/etc/init.d/beanstalkd
来启动和查看beanstalkd进程状态等
Usage: /etc/init.d/beanstalkd {start|stop|force-stop|restart|force-reload|status}1
配置文件所在:
/etc/default/beanstalkd1
php操作beanstalkd
php操作beanstalkd可以利用pheanstalk
composer安装pheanstalk
composer require pda/pheanstalk1
github源码地址:pheanstalk
大略例子:
<?phprequire'vendor/autoload.php';
use Pheanstalk\Pheanstalk;
$pheanstalk=new Pheanstalk('127.0.0.1');
// ----------------------------------------
// 生产一个job,放入testtube这个tube中
$pheanstalk->useTube('testtube')
->put(\公众job payload goes here\n\公众);
// ----------------------------------------
// 消费者监听testtube这个tube,
$job=$pheanstalk->watch('testtube')
->ignore('default')
->reserve();
//此处进行业务处理
echo $job->getData();
//业务处理成功后删除job
$pheanstalk->delete($job);
在实际开拓中,生产者和消费者肯定是分开的,这里只是为了大略演示以是写在一个文件中
reserve()方法是壅塞的,在实际开拓中,可以在while循环中利用reserve()方法持续监听,一有任务就实行,如:
while(true){ $job = $pheanstalk ->watch('testtube') ->reserve(); //此处进行业务处理 }beanstalk管理工具
beanstalk_console (github自行搜索)
支配并访问这个管理工具,如果报了nginx 502 gateway 的缺点,可考试测验以下办理方案:
打开lib/include.php,删除或注释 Pheanstalk_ClassLoader::register(dirname(__FILE__));