【发布时间】:2014-07-29 09:52:20
【问题描述】:
我正在使用 Apache Storm,我想知道是否可以像这样用另一个螺栓组合螺栓:
public class MyNewBolt extends BaseRichBolt {
private MyOldBolt bolt; // MyOldBolt also extends BaseRichBolt
public MyNewBolt(MyOldBolt bolt) {
this.bolt = bolt;
}
@Override
public void prepare(Map map, TopologyContext topologyContext, OutputCollector outputCollector) {
bolt.prepare(map, topologyContext, outputCollector);
//Prepare other stuff
}
@Override
public void execute(Tuple tuple) {
bolt.execute(tuple);
bolt.someOtherMethod();
//Do some other stuff
}
@Override
public void declareOutputFields(OutputFieldsDeclarer outputFieldsDeclarer) {
bolt.declareOutputFields(outputFieldsDeclarer);
}
}
在此之后我会提交螺栓:
public static void main(String[] args) throws Exception {
.
.
.
TopologyBuilder builder = new TopologyBuilder();
BaseRichBolt bolt = new MyNewBolt(new MyOldBolt());
builder.setBolt("bolt-id", bolt).someGrouping(....);
.
.
.
}
这在我以本地模式运行时有效,但它实际上可以在远程模式下工作吗? Storm在这种情况下是如何处理bolt序列化-反序列化的呢?现在创建了多少任务?
【问题讨论】:
-
你在集群上试过了吗?我同意您的怀疑,即由于创建螺栓的方式,为“bolt-id”创建工人可能存在一些问题,但最好的了解方法是尝试并查看。我似乎记得一些与动态类创建相关的限制。
-
我没有设置真正的风暴集群。我在本地(测试)模式下工作,当我运行我的代码时它可以工作(没有错误或异常)。因为我学会了不相信模拟,所以我只是想知道在真正的工作风暴集群上这样做是否合法。对于我的项目,我只需要在本地模式下测试我的拓扑。所以也许真正的问题是本地模式是 100% 准确地模拟真实集群还是有一些例外?
标签: java constructor decorator composition apache-storm