Storm框架:如何根據業務條件選擇不同的bolt進行下發訊息
Strom框架基本概念就不提了,這裡主要講的是Stream
自定義ID的訊息流。預設spout、bolt都需實現介面方法declareOutputFields
,程式碼如下:
@Overridepublic void declareOutputFields(OutputFieldsDeclarer outputFieldsDeclarer) { outputFieldsDeclarer.declare(new Fields("body")); }
這種情況下發的訊息會被所有定義的bolts接收。我們如果需要根據得到的訊息型別來選擇不同的bolt,就需要用到Stream Grouping。
首先透過訊息源的
OutputFieldsDeclarer
來定義發射多條訊息流stream
以下定義了兩種stream訊息流:email郵件、sms簡訊
@Overridepublic void declareOutputFields(OutputFieldsDeclarer outputFieldsDeclarer) { outputFieldsDeclarer.declareStream("email", new Fields("body")); outputFieldsDeclarer.declareStream("sms", new Fields("body")); }
然後我們透過對訊息內容進行分析判斷來決定發射指定的stream型別
@Overridepublic void execute(Tuple tuple) { String streamType; String value = tuple.getStringByField("body"); # 邏輯判斷stub code if (value.startsWith("email:")) { streamType = "email"; } else { streamType = "sms"; } outputCollector.emit(streamType, new Values(value)); }
topology設定bolt的訊息源時透過localOrShuffleGrouping來設定只接收指定stream的訊息
FilterBolt透過對訊息進行加工處理,下發給bolts時會指定不同的stream,EmailNotifyBolt只接收email
型別的stream訊息,SmsNotifyBolt只接收sms
型別的stream訊息。
TopologyBuilder topologyBuilder = new TopologyBuilder(); topologyBuilder.setSpout("RabbitmqSpout", new RabbitmqSpout()); topologyBuilder.setBolt("FilterBolt", new FilterBolt()).shuffleGrouping("RabbitmqSpout"); topologyBuilder.setBolt("EmailNotifyBolt", new EmailNotifyBolt()).localOrShuffleGrouping("FilterBolt", "email"); topologyBuilder.setBolt("SmsNotifyBolt", new SmsNotifyBolt()).localOrShuffleGrouping("FilterBolt", "sms");
Hey, show me the code!
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/758/viewspace-2816783/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 大資料時代,如何根據業務選擇合適的分散式框架大資料分散式框架
- Pandas根據篩選條件對指定excel列進行篩選!神器!Excel
- 根據條件動態更新不同表的資料
- javascript實現根據點選按鈕的不同進行不同的操作JavaScript
- [程式碼結構設計]根據不同條件使用不同實現類的業務程式碼設計
- 如何在列表,字典,集合中根據條件篩選資料
- 使用SQLLOADER將每行資料根據條件插入不同表SQL
- Twitter Storm中Bolt訊息傳遞路徑之原始碼解讀ORM原始碼
- Vue根據條件新增click事件Vue事件
- 如何根據自己的需要選擇伺服器配置?伺服器
- FLEX4實踐—DatagridColumn根據條件顯示不同顏色Flex
- 根據使用者不同的選擇動態改變程式的標題
- 如何進行框架的選擇框架
- 如何選擇RabbitMQ的訊息儲存方式?MQ
- 2-如何選擇訊息佇列佇列
- 如何根據寶塔皮膚引數選擇伺服器伺服器
- 如何根據不同業務場景調節 HPA 擴縮容靈敏度
- 如何根據業務封裝自己的功能元件封裝元件
- 根據選擇的物料顯示其特性值
- 根據查詢條件批量修改表資料
- 如何進行機器學習框架選擇機器學習框架
- 微信小程式中根據字母選擇城市微信小程式
- Spring Cloud Stream同一通道根據訊息內容分發不同的消費邏輯SpringCloud
- goldegate根據實際要求進行對映到多個不同表Go
- 如何根據資料的分佈來選擇ML演算法? - Reddit演算法
- 基於條件熵的特徵選擇熵特徵
- RFID電子標籤根據應用場景的不同如何選型?
- 直播系統原始碼,vue二種方式根據條件判斷顯示不同樣式原始碼Vue
- 如何根據 SAP UI5 框架程式碼丟擲的錯誤訊息,反查出是哪一行程式碼引起的錯誤訊息試讀版UI框架行程
- 微信小程式--根據首字母選擇城市微信小程式
- 複雜業務下,我們為何選擇 Akka 作為非同步通訊框架?非同步框架
- Storm應用系列之——Spout、Bolt APIORMAPI
- 如何為微服務選擇正確的訊息佇列微服務佇列
- 根據開源資料庫選擇合適的工具資料庫
- 根據datetimepicker選擇的日期計算年齡
- React 的幾種條件渲染以及選擇React
- [Q]怎麼實現一條記錄根據條件多表插入 zt
- Spark Streaming,Flink,Storm,Kafka Streams,Samza:如何選擇流處理框架SparkORMKafka框架