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

 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状态转换

自己理解的状态转换图:

经测试,处于任何状态的job都可以执行delete命令删除之<br>

job状态转换

#####任务持久化 Beanstalkd基于内存队列实现,重新启动队列置空。Beantalkd提供binlog进行数据存储,启动时指定备份文件,再次启动后数据能恢复到队列中。但数据过多时,重启加载时间过长。实际运用中,可以选择数据库为任务提供持久化存储。 ###beanstalkd引入项目 beanstalkd具有延迟性、高性能、超时重发等性能,是一个做延迟任务的不错选择。性能方面,Facebook Causes应用9.5 million用户考验过。故将其引入项目。 #####改写客户端 使用的Java客户端TrendrrBeanstalk源码简单明了,根据自身需求在原来基础上进行了一定改写,定制属于自己的客户端 #####任务存储 为了便于维护和管理job,最后决定使用数据库对任务进行持久化存储,放弃其原生的binlog存储形式 #####定制接口,投入生产 现有业务已接入beanstalkd,使用情况待后期补充

#####最后,再次感谢各位网友的无私分享,才得以顺利进行。beanstalkd网上交流平台,查阅的知识都相对较少,附上在网上找到的QQ交流群:461605023

转载于:https://my.oschina.net/u/2264912/blog/726560

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值