是否可以将不同的元组从 1 个 spout 发送到 Apache Storm 中的不同 bolt? 例如,我有 Spout A,它需要将元组 B 发送到 bolt C,将元组 D 发送到 bolt E。 我应该如何在 Java 中使用 spout 来实现它?我的意思是如何编写代码。
OutputCollector.emit(new Values(B, C))?
最佳答案
要从一个 Spout 向不同的 bolt 发送元组,您可以使用命名流,如下所示:
喷口
@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"));
}
然后,每个 bolt 订阅一个特定的流:
builder.setBolt("MyBoltA", new BoltA()).shuffleGrouping("MySpout", "streamA");
builder.setBolt("MyBoltB", new BoltB()).shuffleGrouping("MySpout", "streamB");
最后,如果一个 bolt 订阅了多个流,你可以使用下面的方法来知道元组是从哪个流发出的:
tuple.getSourceStreamId()
关于java - 将不同的元组从 1 个喷口发送到 Apache Storm 中的不同 bolt ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30386338/