2016-11-29 6 views
0

私の目標は、トポロジ全体にメトリックを追加することです。ベース/リッチボルトクラスを拡張するボルトではうまくいくが、次のようなボルトにはメトリックを登録できない。AbstractRedisBoltclass抽象クラス内のTopologyContextへのアクセス方法

私は、AbstractRedisBoltを拡張するボルト内でTopologyContextを取得しようとしています。ただし、このクラスのprepareメソッドは、トポロジコンテキストを派生クラスに公開しません。

AbstractRedisBoltクラスを拡張しようとしましたが、コンテキストのクラスプロパティとそのプロパティを返すメソッドを定義することで、実際にはうまくいきませんでした。私はボルト内のトポロジーコンテキストへの参照を取得することになりますが、context.registerMetric操作ではメトリックは登録されません。

ちょうどスーパークラスへの呼び出しを含むprepare()を上書きし、

答えて

1

ありがとう:

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'を子クラス内でインスタンス化する必要があるかどうかはまだ分かりません。 'prepare'メソッドが利用できないので、私は現在' execute'メソッド内でそれをやっています: 'super.context.registerMetric(ConfigTopology.METRICS_TOTAL_TO_ENRICH、numEventsEnriched、oneMin); ' –

+1

こんにちは、マティアス。どうもありがとうございます。私はちょうどRTFMをしました、ここで "M"はメッセージを表します;)実際、メッセージはそれをすべて言っていました。私は単に 'prepare'メソッドのオーバーライドをボルト内で行い、' prepare'メソッド内でメトリックを宣言して登録しました。 Muchas graciasseñor! –

+1

私はRTFMが好きです! ;) –

関連する問題