1

我制作风暴拓扑,我正在处理这种格式的字符串:“xxxx”,其中 x 是某个数字。我希望字符串流在 4 个螺栓之间平均分配。

问题是对于下面的代码,所有的螺栓都得到所有的元组,而不是发送 eack 元组到一个螺栓:

builder.setSpout("digits-spout", new ReaderSpout());
builder.setBolt("level-1", new SomeBolt(1)).shuffleGrouping("digits-spout");
builder.setBolt("level-2", new SomeBolt(2)).shuffleGrouping("digits-spout");
builder.setBolt("level-3", new SomeBolt(3)).shuffleGrouping("digits-spout");
builder.setBolt("level-4", new SomeBolt(4)).shuffleGrouping("digits-spout");

如您所见,我使用相同的螺栓但不同的构造器。谢谢!

4

2 回答 2

0

根据我从您的问题中了解到的情况,我可能会为您的问题提供额外的螺栓,例如以下示例:

builder.setSpout("digits-spout", new ReaderSpout());

builder.setBolt("stringSplitterBoltName", new 
StringSplitterBolt(1)).shuffleGrouping("digits-spout");

builder.setBolt("level-1", new 
SomeBolt(1)).shuffleGrouping("stringSplitterBoltName");

builder.setBolt("level-2", new 
SomeBolt(2)).shuffleGrouping("stringSplitterBoltName");

builder.setBolt("level-3", new 
SomeBolt(3)).shuffleGrouping("stringSplitterBoltName");

builder.setBolt("level-4", new 
SomeBolt(4)).shuffleGrouping("stringSplitterBoltName");
于 2017-05-29T08:56:21.637 回答
0

如果你想让bolt有不同的处理逻辑,你可以添加同一个bolt的4个task。在这种情况下,您将在螺栓实例之间随机收到消息。您可以检查该螺栓中的字符串值并采用适当的执行路径。您将避免为 4 个螺栓使用单独的代码库。

或者,如果您想为字符串设置单独的螺栓代码,请参考 zackeriya 的上述建议。

于 2017-12-11T18:43:17.903 回答