2016-11-29 62 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! ;) –