将不同的元组从 1 个喷口发送到 Apache Storm 中的不同螺栓
Sent different tuples from 1 spout to different bolt in Apache Storm
是否可以将不同的元组从 1 个 spout 发送到 Apache Storm 中的不同 bolt?
例如,我有 Spout A,它需要将元组 B 发送到螺栓 C,将元组 D 发送到螺栓 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()
是否可以将不同的元组从 1 个 spout 发送到 Apache Storm 中的不同 bolt? 例如,我有 Spout A,它需要将元组 B 发送到螺栓 C,将元组 D 发送到螺栓 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()