apache storm-用另一个螺栓组合螺栓

6fe3ivhb  于 2021-06-21  发布在  Storm
关注(0)|答案(1)|浏览(472)

我正在使用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如何处理序列化反序列化?现在创建了多少个任务?

6qfn3psc

6qfn3psc1#

我建议你采取另一种方法(巧合的是我使用的方法)。不要将bolt视为可重用类,而是将bolt的业务逻辑分解为纯java类。如果您想在另一个螺栓中重用该逻辑,那么这样做要容易得多。
我还建议您将与特定流相关的所有行为(名称、类型和元组中值的顺序等知识)考虑到另一个类中。bolt类的实现应该相当少。

相关问题