我正在使用ApacheStorm,我想知道是否可以将一个螺栓与另一个螺栓组合成这样:
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如何处理序列化反序列化?现在创建了多少个任务?
1条答案
按热度按时间6qfn3psc1#
我建议你采取另一种方法(巧合的是我使用的方法)。不要将bolt视为可重用类,而是将bolt的业务逻辑分解为纯java类。如果您想在另一个螺栓中重用该逻辑,那么这样做要容易得多。
我还建议您将与特定流相关的所有行为(名称、类型和元组中值的顺序等知识)考虑到另一个类中。bolt类的实现应该相当少。