這篇文章給大家介紹如何在storm應(yīng)用中實(shí)現(xiàn)定時(shí)調(diào)度,內(nèi)容非常詳細(xì),感興趣的小伙伴們可以參考借鑒,希望對(duì)大家能有所幫助。
創(chuàng)新互聯(lián)專注于企業(yè)網(wǎng)絡(luò)營(yíng)銷推廣、網(wǎng)站重做改版、南陽(yáng)網(wǎng)站定制設(shè)計(jì)、自適應(yīng)品牌網(wǎng)站建設(shè)、H5建站、商城開發(fā)、集團(tuán)公司官網(wǎng)建設(shè)、外貿(mào)營(yíng)銷網(wǎng)站建設(shè)、高端網(wǎng)站制作、響應(yīng)式網(wǎng)頁(yè)設(shè)計(jì)等建站業(yè)務(wù),價(jià)格優(yōu)惠性價(jià)比高,為南陽(yáng)等各大城市提供網(wǎng)站開發(fā)制作服務(wù)。
在storm中實(shí)時(shí)定時(shí)調(diào)度, 較好的方式是利用spout的nextTuple()不斷循環(huán)觸發(fā)你的定時(shí)任務(wù)。
首先, 把需要定時(shí)調(diào)度的邏輯用一個(gè)bolt實(shí)現(xiàn),其execute方法的偽代碼如下:
// 從topology的全局對(duì)象 backtype.storm.Config取得上次調(diào)度時(shí)間 Date 上次調(diào)度時(shí)間 = config.get("上次調(diào)度時(shí)間"); if ( 如果當(dāng)前時(shí)間 - 上次調(diào)度時(shí)間 >= 調(diào)度間隔 ) { // 執(zhí)行具體業(yè)務(wù)邏輯 doTask(); // 將本次執(zhí)行時(shí)間存入全局對(duì)象 backtype.storm.Config config.put("上次調(diào)度時(shí)間", 當(dāng)前時(shí)間); }
然后, 定義一個(gè)專門的定時(shí)發(fā)送消息的spout,如以下每隔8秒發(fā)送一條消息:
@Override public void nextTuple() { try { Thread.sleep(8 * 1000); collector.emit(new Values("Let's go!")); } catch (Exception e) { log.error("", e); } }
這個(gè)spout發(fā)出的消息沒有任何業(yè)務(wù)意義,只是為了觸發(fā)上面的bolt。
補(bǔ)充說(shuō)明,如果以上代碼在執(zhí)行 config.put() 時(shí)拋出異常 “storm Async loop died!” , 那就改為用redis保存最近一次的執(zhí)行時(shí)間。
關(guān)于如何在storm應(yīng)用中實(shí)現(xiàn)定時(shí)調(diào)度就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,可以學(xué)到更多知識(shí)。如果覺得文章不錯(cuò),可以把它分享出去讓更多的人看到。
網(wǎng)頁(yè)名稱:如何在storm應(yīng)用中實(shí)現(xiàn)定時(shí)調(diào)度
標(biāo)題來(lái)源:http://jinyejixie.com/article12/psicdc.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供品牌網(wǎng)站建設(shè)、電子商務(wù)、外貿(mào)建站、App設(shè)計(jì)、定制網(wǎng)站、網(wǎng)站排名
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)