将不同的元组从 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()