2

Micrometer タイマーを Webflux コントローラーで使用する簡単な方法はありますか?

@Timed は、非反応的なメソッドでのみ機能するようです。リアクティブの場合、非常に低い時間値が記録されます。

同様の質問を見つけました:マイクロメータータイマーを使用して非同期メソッドの期間を記録する方法 (Mono または Flux を返します)が、そのような一般的な問題に対して答えが複雑すぎました

何か案は?

4

1 に答える 1

3

Web-flux メソッド/呼び出しの時間を測定したい場合は、Flux/Mono から直接メトリクスを簡単に使用できます (さらに、グラファイトなどのメトリクスをエクスポートするようにプロジェクトを構成します)。

例は次のようになります

Flux<String> dataStream = Flux.just("AA", "BB", "CC", "DD");
dataStream.name("my-test-name").tag("key1", "value1").metrics().subscribe(p ->
   {
      System.out.println("Hello " + p);
      try {
         Thread.sleep(1000);
      } catch (InterruptedException e) {
         e.printStackTrace();
   }
});

次に、私の場合、グラファイトのメトリックは、アプリケーション名.magdalena の下にあります。reactor.flow.duration.exception.flow.my-test-name.status.completed.type.Flux.p50 p50 - リクエストの半分のレイテンシ (またはリクエストの 98% の p98 レイテンシなど) です。この例の人為的な遅延に感謝します。値が 4000 (1 秒 x 処理された 4 要素) に近いことがわかります。

グラファイトの application.yml の構成:

management:
    metrics:
        export:
            graphite:
                enabled: true
                host: graphite-lhr10.something.com
                port: 2003
                protocol: plaintext

@Timed アノテーションも機能しませんでした。

于 2019-05-10T10:17:18.843 に答える