beanstalkd实现延迟任务
2016-08-03 00:00
337 查看
摘要: beanstalkd是一个c语言编写的开源的轻量级任务调度框架,以下就beanstalkd实现延迟任务功能进行简单说明
公司业务中需要用到延迟功能,时间误差要求小,多方调研,最后选择使用beanstalkd。文档将过程记录下来,以便回顾。
###beanstalkd 初探
beanstalkd是一个c语言编写的开源的轻量级任务调度框架。通过查询网上资料,大概了解下beanstalkd(网上相关资料并不是很多),在此感谢各位网页的分享贡献,主要参考资料地址如下:
官方文档
http://in355hz.iteye.com/blog/1395727) http://www.bytedancer.net/archives/21 http://www.fzb.me/2015-3-21-beanstalkd-protocol-chinese-version.html
还有很多网友的讨论,网址忘记记录了
#####1、安装
在官方文档上下载最新版beanstalkd安装
下载:wget -c https://github.com/kr/beanstalkd/archive/v1.10.tar.gz -O beanstalkd-1.10.tar.gz(-O是为了重命名,注意是大写)
解压:tar –xvzf beanstalkd-1.10.tar.gz
文档结构:解压后的文件包括beanstalkd的源码以及相关说明,查看readme文件中有使用说明,目录doc下的文件中protocol.txt有详细的命令使用说明
安装:cd beanstalkd-1.10
beantalkd需要使用libevent,如果没有libevent,则需要先安装libevent
#####2、使用
启动:
进入到安装目录下的bin中,执行./beanstalkd -l host -p port,默认端口是11300,后台启动命令:nohup ./beanstalkd -b /data/log/beanstalkd -l host -p port 2>1& &
客户端:
github上有不同语言的客户端https://github.com/kr/beanstalkd/wiki/client-libraries不过好像都是各位使用者自己写了由几个官方维护的人收录的。Java客户端,经过比较和实际需求,最后选择了TrendrrBeanstalkhttps://github.com/dustismo/TrendrrBeanstalk
管理端:
使用的是beanstalk-mubinhttps://github.com/urbanairship/beanstalk-munin,一个基于python的管理小插件
第一个小测试:
TrendrrBeantalk中有简单好用的测试Demo,以下代码向beanstalkd中放入一条需要延迟60s的job
###beanstalkd进一步了解
官方提供的文档中protocol.txt已经有详细的描述,文档是英文的。有相关中文翻译http://www.fzb.me/2015-3-21-beanstalkd-protocol-chinese-version.html
#####管道(Tube)与任务(Job)
beanstalkd主要通过管道tube来存放同种类型的job,各个tube见互不干扰。任务提供者可使用useTube命令指定使用的tube,任务消费者使用watchTube命令监听Tube。beanstalkd提供一个默认的tube: default。
#####任务的生命周期
任务提供者通过put命令创建一个job,在整个生命周期中job有四个不同的生命状态:ready、reserved、delayed、buried,当执行delete命令后,job从beantalkd中删除,生命周期结束。
job的状态转换如下:
官方状态图:
自己理解的状态转换图:
经测试,处于任何状态的job都可以执行delete命令删除之<br>
#####任务持久化
Beanstalkd基于内存队列实现,重新启动队列置空。Beantalkd提供binlog进行数据存储,启动时指定备份文件,再次启动后数据能恢复到队列中。但数据过多时,重启加载时间过长。实际运用中,可以选择数据库为任务提供持久化存储。
###beanstalkd引入项目
beanstalkd具有延迟性、高性能、超时重发等性能,是一个做延迟任务的不错选择。性能方面,Facebook Causes应用9.5 million用户考验过。故将其引入项目。
#####改写客户端
使用的Java客户端TrendrrBeanstalk源码简单明了,根据自身需求在原来基础上进行了一定改写,定制属于自己的客户端
#####任务存储
为了便于维护和管理job,最后决定使用数据库对任务进行持久化存储,放弃其原生的binlog存储形式
#####定制接口,投入生产
现有业务已接入beanstalkd,使用情况待后期补充
#####最后,再次感谢各位网友的无私分享,才得以顺利进行。beanstalkd网上交流平台,查阅的知识都相对较少,附上在网上找到的QQ交流群:461605023
公司业务中需要用到延迟功能,时间误差要求小,多方调研,最后选择使用beanstalkd。文档将过程记录下来,以便回顾。
###beanstalkd 初探
beanstalkd是一个c语言编写的开源的轻量级任务调度框架。通过查询网上资料,大概了解下beanstalkd(网上相关资料并不是很多),在此感谢各位网页的分享贡献,主要参考资料地址如下:
官方文档
http://in355hz.iteye.com/blog/1395727) http://www.bytedancer.net/archives/21 http://www.fzb.me/2015-3-21-beanstalkd-protocol-chinese-version.html
还有很多网友的讨论,网址忘记记录了
#####1、安装
在官方文档上下载最新版beanstalkd安装
下载:wget -c https://github.com/kr/beanstalkd/archive/v1.10.tar.gz -O beanstalkd-1.10.tar.gz(-O是为了重命名,注意是大写)
解压:tar –xvzf beanstalkd-1.10.tar.gz
文档结构:解压后的文件包括beanstalkd的源码以及相关说明,查看readme文件中有使用说明,目录doc下的文件中protocol.txt有详细的命令使用说明
安装:cd beanstalkd-1.10
make make install --prefix=/your dir/
beantalkd需要使用libevent,如果没有libevent,则需要先安装libevent
#####2、使用
启动:
进入到安装目录下的bin中,执行./beanstalkd -l host -p port,默认端口是11300,后台启动命令:nohup ./beanstalkd -b /data/log/beanstalkd -l host -p port 2>1& &
客户端:
github上有不同语言的客户端https://github.com/kr/beanstalkd/wiki/client-libraries不过好像都是各位使用者自己写了由几个官方维护的人收录的。Java客户端,经过比较和实际需求,最后选择了TrendrrBeanstalkhttps://github.com/dustismo/TrendrrBeanstalk
管理端:
使用的是beanstalk-mubinhttps://github.com/urbanairship/beanstalk-munin,一个基于python的管理小插件
第一个小测试:
TrendrrBeantalk中有简单好用的测试Demo,以下代码向beanstalkd中放入一条需要延迟60s的job
BeanstalkClient client = new BeanstalkClient("114.55.140.33", 11300, "tube1"); //优先级、延迟时间、TTR、消息体,延迟时间为60S long jobId = client.put(1l, 60, 50, "this is some data".getBytes()); System.out.println(jobId);
###beanstalkd进一步了解
官方提供的文档中protocol.txt已经有详细的描述,文档是英文的。有相关中文翻译http://www.fzb.me/2015-3-21-beanstalkd-protocol-chinese-version.html
#####管道(Tube)与任务(Job)
beanstalkd主要通过管道tube来存放同种类型的job,各个tube见互不干扰。任务提供者可使用useTube命令指定使用的tube,任务消费者使用watchTube命令监听Tube。beanstalkd提供一个默认的tube: default。
#####任务的生命周期
任务提供者通过put命令创建一个job,在整个生命周期中job有四个不同的生命状态:ready、reserved、delayed、buried,当执行delete命令后,job从beantalkd中删除,生命周期结束。
job的状态转换如下:
官方状态图:
自己理解的状态转换图:
经测试,处于任何状态的job都可以执行delete命令删除之<br>
#####任务持久化
Beanstalkd基于内存队列实现,重新启动队列置空。Beantalkd提供binlog进行数据存储,启动时指定备份文件,再次启动后数据能恢复到队列中。但数据过多时,重启加载时间过长。实际运用中,可以选择数据库为任务提供持久化存储。
###beanstalkd引入项目
beanstalkd具有延迟性、高性能、超时重发等性能,是一个做延迟任务的不错选择。性能方面,Facebook Causes应用9.5 million用户考验过。故将其引入项目。
#####改写客户端
使用的Java客户端TrendrrBeanstalk源码简单明了,根据自身需求在原来基础上进行了一定改写,定制属于自己的客户端
#####任务存储
为了便于维护和管理job,最后决定使用数据库对任务进行持久化存储,放弃其原生的binlog存储形式
#####定制接口,投入生产
现有业务已接入beanstalkd,使用情况待后期补充
#####最后,再次感谢各位网友的无私分享,才得以顺利进行。beanstalkd网上交流平台,查阅的知识都相对较少,附上在网上找到的QQ交流群:461605023
相关文章推荐
- beanstalkd实现延迟任务
- 无限循环+延迟执行来实现计划任务 转载
- JavaScript 实现延迟合并处理任务
- 延迟任务和周期任务的实现(ScheduledThreadPoolExecutor)
- 用NodeJs实现延迟调用,规避定时任务的闭包问题
- 万物生长 项目jar包越少越好,不然会导致eclipse进入断点延迟高,很慢. Spring+quartz 实现定时任务job集群配置
- 延迟任务的实现总结
- Rabbitmq延迟队列实现定时任务的方法
- 源码解析线程池调度器之任务延迟调度实现机制
- 使用RabbitMQ实现延迟任务
- 使用RabbitMQ实现延迟任务(转载)
- 关于利用RabbitMQ实现延迟任务的方法详解
- 延迟任务和周期任务的实现(ScheduledThreadPoolExecutor)
- 实现你自己的 RunnableScheduledFuture 接口来执行延迟和周期性任务。【回头再看看】
- 延迟任务的实现总结
- 延迟任务的实现总结
- 剪贴板延迟提交的实现
- CToolBar和SetTimer结合实现类似PhotoShop - pallet的延迟菜单输出效果
- oracle怎么实现每天定时执行一个计划任务
- jbpm的任务管理实现