经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » Java相关 » Java » 查看文章
Storm框架:如何根据业务条件选择不同的bolt进行下发消息
来源:cnblogs  作者:本拉邓  时间:2018/11/2 9:19:27  对本文有异议

Strom框架基本概念就不提了,这里主要讲的是Stream自定义ID的消息流。默认spout、bolt都需实现接口方法declareOutputFields,代码如下:

  1. @Override
  2. public void declareOutputFields(OutputFieldsDeclarer outputFieldsDeclarer) {
  3. outputFieldsDeclarer.declare(new Fields("body"));
  4. }

这种情况下发的消息会被所有定义的bolts接收。我们如果需要根据得到的消息类型来选择不同的bolt,就需要用到Stream Grouping。

  • 首先通过消息源的OutputFieldsDeclarer来定义发射多条消息流stream

以下定义了两种stream消息流:email邮件、sms短信

  1. @Override
  2. public void declareOutputFields(OutputFieldsDeclarer outputFieldsDeclarer) {
  3. outputFieldsDeclarer.declareStream("email", new Fields("body"));
  4. outputFieldsDeclarer.declareStream("sms", new Fields("body"));
  5. }
  • 然后我们通过对消息内容进行分析判断来决定发射指定的stream类型
  1. @Override
  2. public void execute(Tuple tuple) {
  3. String streamType;
  4. String value = tuple.getStringByField("body");
  5. # 逻辑判断stub code
  6. if (value.startsWith("email:")) {
  7. streamType = "email";
  8. } else {
  9. streamType = "sms";
  10. }
  11. outputCollector.emit(streamType, new Values(value));
  12. }
  • topology设置bolt的消息源时通过localOrShuffleGrouping来设置只接收指定stream的消息

FilterBolt通过对消息进行加工处理,下发给bolts时会指定不同的stream,EmailNotifyBolt只接收email类型的stream消息,SmsNotifyBolt只接收sms类型的stream消息。

  1. TopologyBuilder topologyBuilder = new TopologyBuilder();
  2. topologyBuilder.setSpout("RabbitmqSpout", new RabbitmqSpout());
  3. topologyBuilder.setBolt("FilterBolt", new FilterBolt()).shuffleGrouping("RabbitmqSpout");
  4. topologyBuilder.setBolt("EmailNotifyBolt", new EmailNotifyBolt()).localOrShuffleGrouping("FilterBolt", "email");
  5. topologyBuilder.setBolt("SmsNotifyBolt", new SmsNotifyBolt()).localOrShuffleGrouping("FilterBolt", "sms");
 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号