HTQ 具体介绍
我们在编写法度榜样时,有时会碰到须要用到异部队列的情况。比如说,我发送一万封邮件,如不雅纯真应用一个for轮回来发送,则履行时光要很长,要等良久才能发完,同时很轻易导致壅塞、超时等问题。当邮件更多,比如一百万封的时刻,问题会加倍明显。这时最好的解决方檀卷是把这十万封邮件列队,一一发出去。这就是义务队列的概念。
一、什么是 HTQ
并且,我们并不须要比及十万封邮件都发送完毕后才在网站前台通知用户。我们可以把邮件一入队列,就通知用户。如许,用户等待的时光就不是漫长的“发十万封邮件”的时光,而是“把十万封邮件列队”的时光。是以能明显地缩短了用户等待时光。这就是异步的概念。
HTQ ,全称 Http Task Queue ,是一个以Http方法履行异步义务的队列办事。你可以推送若干url进HTQ队列,HTQ会以Http GET 的方法拜访这些url。如不雅url地点的脚本写上各类具体的义务操作,如发送邮件等,便可以实现异步操作了。HTQ应用node.js编写,可跟各类后台说话如PHP、java合营应用以加强异步处理才能。今朝支撑的队列类型有及时异部队列、准时异部队列、可变异部队列。
如不雅你依然对HTQ陌生,则可往下看具体的应用处景以加深懂得。

二、应用处景
1、及时异部队列
所谓及时,指的是把义务一推动队列就立时履行。一个典范的应用处景就是我们膳绫擎所说的发送邮件。邮件推送进义务队列,队列立时把它发出去。如不雅它推动队列后有其他邮件正在发送中,它则等待当前邮件发送完毕后才发送。
除了发邮件,我们在发文┞仿、发微博、发评论的时刻都可以用得上HTQ的及时义务队列,尤其是数量异常大年夜的时刻。比如评论用户太多,如不雅一刹时让办事器处理,办事器可能因为支撑不了太高的并发大年夜而造成壅塞。这个时刻就可以让评论们进入队列再一一处理。
2、准时异部队列
准时,顾名思义,就是在特定的时光履行义务队列。这种队列办事可用于准时邮件、准时短信。须要解释的是,这里的准时,不必定是精准的准时。假如你设置了明天12点履行某个义务,那么,它在明天12点的时刻将进入队列。假如队列中已经有义务在履行,那么它会等待到前面的义务完毕才履行。此时可能是12点01分钟才履行。
3、可变队列
先介绍下根本概念。
我们推送10个义务进队列,这10个队列会反复轮回地履行,并且它们的履行快慢可以或许根据返回情况进行调剂,这就是可变队列。比如,我们做扫描监控,会反复地履行“扫描”这个义务。我们欲望,在有异常情况的时刻,能加快扫描的速度以便更快速地发明问题;而在没有经久异常的情况能减慢一下扫描速度以节俭机械资本。
再举一个场景例子,经由过程API拉取微博新动态。我们网站上有10万绑定了新浪微博的用户,我们须要时常获取他们的最新动态以展示在我们的网站的用户主页上。 如不雅是采取准时获取动态的方法,那么,假设1分钟能获取1千个用户的动态(因为受API应用频率和收集等原因限制,我们获取不了太快。这里先假设一个数字),那么,获取完所有效户状况须要100分钟。对用户来说,他在微博更新动态后,100分钟后才显示到我们网站。这明显滞后太多。有没有办法加快点呢?此时可以应用HTQ的可变队列。可变队列会对经久没有更新动态的那部分不活泼用户进行减缓速度,减缓对他们微博的获取频率,同时加大年夜对活泼用户的获取频率。如许,一个活泼用户更新微博后,可能10分钟就能同步到我们网站了。对于不活泼用户,可能获取时光会变长了些,但没紧要,我们愿意分派更多的资本去知足活泼用户的需求。
应用可变队列,能让我们有所侧重地应用我们的资本,以削减浪费、增长应用率。
三、安装和应用
1、安装
起首安装好node情况和redis办事,请参考这里和这里。
下载到你想要放置的目次,敕令行进入该目次,履行敕令:
- npm install
安装完毕后,履行以下敕令启动:
- node htq.js
拜访HTQ 的API时须要填写简单的token认证,认证信息在设备文件config.json里定义。为了安然起见,你可以鄙人载代码将token设置为其他随机数。如不雅你已经启动了HTQ,则须要封闭后再重启才能让新设备生效。
膳绫擎这种启动方法是临时运行的,封闭敕令行窗口就会停止了。如不雅想一向在后台运行,则可:
如不雅想封闭退出,可运行:
- killall -9 node
四、安然与容错
2、若何应用
启动后,HTQ默认监听本机的5999端口。你可以经由过程此端口拜访HTQ的APi,以添加队列和义务。具体的API文档
你可以根据API文档来在你的项目中调用API以新建义务。官方供给了一个PHP调用的SDK(在/PHPSDK目次)。迎接其他说话的开辟者也将HTQ的API封装成其他说话的SDK
如不雅要修改默认端口以及默认的redis地址,可修改设备文件config.json。修改完毕需重启HTQ才能生效
1、法度榜样安然
- nohup node htq.js > ~/htq.log 2>&1 &
如不雅你担心直接履行url会带来安然隐患,怕本身裸露的url被外部拜访,那你可以在推送进HTQ的url上带参数签名校验。然后在url触发的义务脚本里考验签名即可。
推荐阅读
我比来一向在浏览关于“若何培养锇惯”的书本。浏览并消化之后,我不禁开端思虑,今朝我有哪些习惯。个一一些是生活方面的,另一些则完全关于工作。这个中有不少习惯是和编程密>>>详细阅读
本文标题:用HTTP方式执行异步任务HTQ
地址:http://www.17bianji.com/lsqh/37092.html
1/2 1

网友点评
精彩导读
科技快报
品牌展示