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
- 大資料時代,如何根據業務選擇合適的分散式框架大資料分散式框架
- 聊聊spring專案如何根據事件條件進行事件分發Spring事件
- [程式碼結構設計]根據不同條件使用不同實現類的業務程式碼設計
- element table的selection根據條件禁用
- Vue根據條件新增click事件Vue事件
- 如何根據自己的需要選擇伺服器配置?伺服器
- 如何進行機器學習框架選擇機器學習框架
- 如何為微服務選擇正確的訊息佇列微服務佇列
- sqlserver根據條件去除重複資料SQLServer
- MQ收到無序的訊息時如何進行業務處理MQ行業
- Spark Streaming,Flink,Storm,Kafka Streams,Samza:如何選擇流處理框架SparkORMKafka框架
- 如何根據不同業務場景調節 HPA 擴縮容靈敏度
- 如何根據業務封裝自己的功能元件封裝元件
- 根據查詢條件批量修改表資料
- RFID電子標籤根據應用場景的不同如何選型?
- 如何依據模切行業特性進行ERP選型行業
- Spring Cloud Stream同一通道根據訊息內容分發不同的消費邏輯SpringCloud
- 2-如何選擇訊息佇列佇列
- 基於條件熵的特徵選擇熵特徵
- 直播系統原始碼,vue二種方式根據條件判斷顯示不同樣式原始碼Vue
- 如何根據寶塔皮膚引數選擇伺服器伺服器
- 如何根據資料的分佈來選擇ML演算法? - Reddit演算法
- 根據應用場景合理選擇工業相機的解析度
- 如何根據 SAP UI5 框架程式碼丟擲的錯誤訊息,反查出是哪一行程式碼引起的錯誤訊息試讀版UI框架行程
- React 的幾種條件渲染以及選擇React
- 如何根據生產環境mysql版本選擇合適的percona xtrabackup版本MySql
- 根據開源資料庫選擇合適的工具資料庫
- mysql like查詢 - 根據多個條件的模糊匹配查詢MySql
- 複雜業務下,我們為何選擇 Akka 作為非同步通訊框架?非同步框架
- 微信小程式--根據首字母選擇城市微信小程式
- pytest-根據類或函式名選擇用例函式
- 如何根據需求選擇合適的資料庫管理工具?Navicat OR DBeaver資料庫
- 根據使用者的不同登入不同的頁面
- JavaScript 根據物件鍵值進行排序JavaScript物件排序
- 微服務下的閘道器如何選擇微服務
- 微服務下的註冊中心如何選擇微服務
- 不同企業該如何選擇伺服器租用伺服器