博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Beanstalkd消息队列的安装与使用
阅读量:6157 次
发布时间:2019-06-21

本文共 1846 字,大约阅读时间需要 6 分钟。

一、Beanstalkd是什么?

Beanstalkd是一个高性能,轻量级的分布式内存队列

 

二、Beanstalkd特性

1、支持优先级(支持任务插队)

2、延迟(实现定时任务)
3、持久化(定时把内存中的数据刷到binlog日志)
4、预留(把任务设置成预留,消费者无法取出任务,等某个合适时机再拿出来处理)
5、任务超时重发(消费者必须在指定时间内处理任务,如果没有则认为任务失败,重新进入队列)

 

三、Beanstalkd核心元素

生产者 -> 管道(tube) -> 任务(job) -> 消费者

Beanstalkd可以创建多个管道,管道里面存了很多任务,消费者从管道中取出任务进行处理。

 

四、任务job状态

delayed 延迟状态

ready 准备好状态
reserved 消费者把任务读出来,处理时
buried 预留状态
delete 删除状态

五、安装Beanstalkd

http://kr.github.io/beanstalkd/download.html

下载beanstalkd-1.10.tar.gz

> tar -xf beanstalkd-1.10.tar.gz> cd beanstalkd-1.10> make

查看beanstalkd参数信息

> ./beanstalkd -h

启动beanstalkd

> ./beanstalkd -l 127.0.0.1 -p 11300 -b /data/beanstalkd/binlog &

-b表示开启binlog,断电后重启自动恢复任务  

 

六、下载Pheanstalk类

首先安装composer

> curl -sS https://getcomposer.org/installer | php> mv composer.phar /usr/local/bin/composer> composer require pda/pheanstalk

 编写一个简单脚本查看信息

stats());

  

七、Pheanstalk使用方法

维护方法

stats() 查看状态方法listTubes() 目前存在的管道listTubesWatched() 目前监听的管道statsTube() 管道的状态useTube() 指定使用的管道statsJob() 查看任务的详细信息peek() 通过任务ID获取任务

生产者方法

putInTube() 往管道中写入数据put() 配合useTube()使用

消费者方法

watch() 监听管道,可以同时监听多个管道ignore() 不监听管道reserve() 以阻塞方式监听管道,获取任务reserveFromTube() release() 把任务重新放回管道bury() 把任务预留peekBuried() 把预留任务读取出来kickJob() 把buried状态的任务设置成readykick() 批量把buried状态的任务设置成readypeekReady() 把准备好的任务读取出来peekDelayed() 把延迟的任务读取出来pauseTube() 给管道设置延迟resumeTube() 取消管道延迟touch() 让任务重新计算ttr时间,给任务续命

生产者producer.php代码如下:

1, 'name' => 'test',);//向userReg管道中添加任务,返回任务ID//put()方法有四个参数//第一个任务的数据//第二个任务的优先级,值越小,越先处理//第三个任务的延迟//第四个任务的ttr超时时间$id = $p->useTube('userReg')->put(json_encode($data));//获取任务$job = $p->peek($id);//查看任务状态print_r($p->statsJob($job));

消费者consumer.php代码如下:

watch('userReg')->ignore('default')->reserve();$data = json_decode($job->getData());//打印任务中的数据print_r($data);//最后删除任务,表示任务处理完成$p->delete($job);

  

转载于:https://www.cnblogs.com/jkko123/p/8177731.html

你可能感兴趣的文章
c++面向对象的一些问题1 0
查看>>
售前工程师的成长---一个老员工的经验之谈
查看>>
Get到的优秀博客网址
查看>>
老男孩教育每日一题-第107天-简述你对***的理解,常见的有哪几种?
查看>>
Python学习--time
查看>>
在OSCHINA上的第一篇博文,以后好好学习吧
查看>>
Spring常用注解
查看>>
linux:yum和apt-get的区别
查看>>
Sentinel 1.5.0 正式发布,引入 Reactive 支持
查看>>
数据库之MySQL
查看>>
2019/1/15 批量删除数据库相关数据
查看>>
数据类型的一些方法
查看>>
Webpack 2 中一些常见的优化措施
查看>>
移动端响应式
查看>>
js中var、let、const的区别
查看>>
简洁优雅地实现夜间模式
查看>>
react学习总结
查看>>
在soapui上踩过的坑
查看>>
MySQL的字符集和字符编码笔记
查看>>
ntpd同步时间
查看>>