2016-11-29 57 views
0

我的目标是在整个拓扑中添加指标。对于扩展基本/富集类的螺栓,情况很好,但我无法在螺栓内注册任何指标,扩展以下AbstractRedisBoltclass如何访问抽象类中的拓扑上下文

我想在扩展AbstractRedisBolt的螺栓内得到TopologyContext。但是,此类的prepare方法不会将拓扑上下文暴露给派生类。

我试图扩展AbstractRedisBolt类,方法是定义上下文的类属性+返回该属性的方法,但实际上并不成功。我最终得到了我的螺栓中的拓扑上下文的引用,但是context.registerMetric操作没有注册任何指标。

谢谢

回答

1

只是简单地覆盖prepare()包括超类的电话:

public class MyRedisBolt extends AbstractRedisBolt { 
    private TopologyContext context = null; 

    public void prepare(Map map, TopologyContext topologyContext, OutputCollector collector) { 
     super.prepare(map, topologyContext, collector); 
     this.context = topologContext; 
    } 
} 
+0

喜马蒂亚斯,感谢您的答复。我试图扩展AbstractRedisBolt,现在我开始得到这个消息:'java.lang.RuntimeException:TopologyContext.registerMetric只能在重写的IBolt :: prepare()或ISpout :: open()方法中调用。另外,我仍然不确定应该在子类中实例化numEventsEnriched = new CountMetric();和registerMetric。我正在执行'execute'方法,因为'prepare'方法不可用:'super.context.registerMetric(ConfigTopology.METRICS_TOTAL_TO_ENRICH,numEventsEnriched,oneMin);' –

+1

嗨,Matthias。非常感谢。我只是做了RTFM,其中“M”代表消息;)的确,消息说明了一切。我只是在螺栓内部重写了'prepare'方法,在'prepare'方法中声明并注册了度量,并且瞧! Muchas graciasseñor! –

+1

我喜欢RTFM! ;) –