您好,登錄后才能下訂單哦!
這篇文章給大家介紹如何在storm應用中實現定時調度,內容非常詳細,感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。
在storm中實時定時調度, 較好的方式是利用spout的nextTuple()不斷循環觸發你的定時任務。
首先, 把需要定時調度的邏輯用一個bolt實現,其execute方法的偽代碼如下:
// 從topology的全局對象 backtype.storm.Config取得上次調度時間 Date 上次調度時間 = config.get("上次調度時間"); if ( 如果當前時間 - 上次調度時間 >= 調度間隔 ) { // 執行具體業務邏輯 doTask(); // 將本次執行時間存入全局對象 backtype.storm.Config config.put("上次調度時間", 當前時間); }
然后, 定義一個專門的定時發送消息的spout,如以下每隔8秒發送一條消息:
@Override public void nextTuple() { try { Thread.sleep(8 * 1000); collector.emit(new Values("Let's go!")); } catch (Exception e) { log.error("", e); } }
這個spout發出的消息沒有任何業務意義,只是為了觸發上面的bolt。
補充說明,如果以上代碼在執行 config.put() 時拋出異常 “storm Async loop died!” , 那就改為用redis保存最近一次的執行時間。
關于如何在storm應用中實現定時調度就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。