Storm架構:如何根據業務條件選擇不同的bolt進行下發訊息

來源:互聯網
上載者:User

標籤:ping   log   邏輯   概念   .com   lse   orm   兩種   ima   

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");

Storm架構:如何根據業務條件選擇不同的bolt進行下發訊息

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.