繁体   English   中英

在Apache Storm中将不同的元组从1个spout发送到不同的bolt

[英]Sent different tuples from 1 spout to different bolt in Apache Storm

是否有可能在Apache Storm中将不同的元组从1个喷口发送到不同的螺栓? 例如,我有Spout A,需要将Buple B发送给Bolt C,将Tuple D发送给Bolt E.我应该如何使用Java中的spout实现它? 我的意思是如何编写代码。

OutputCollector.emit(new Values(B, C))?

要从一个Spout向不同的螺栓发出元组,您可以使用命名流,如下所示:

喷口

@Override
public void declareOutputFields(OutputFieldsDeclarer outputFieldsDeclarer) {
    outputFieldsDeclarer.declareStream("streamA", new Fields("A"));
    outputFieldsDeclarer.declareStream("streamB", new Fields("B"));
}


@Override
public void nextTuple() {
    outputCollector.emit("streamA", new Values("A"));
    outputCollector.emit("streamB", new Values("B"));
}

然后,每个螺栓订阅一个特定的流:

builder.setBolt("MyBoltA", new BoltA()).shuffleGrouping("MySpout", "streamA"); 
builder.setBolt("MyBoltB", new BoltB()).shuffleGrouping("MySpout", "streamB");

最后,如果一个bolt订阅了几个流,你可以使用以下方法来知道哪个流已经发出了一个元组:

tuple.getSourceStreamId()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM