Micrometer タイマーを Webflux コントローラーで使用する簡単な方法はありますか?
@Timed は、非反応的なメソッドでのみ機能するようです。リアクティブの場合、非常に低い時間値が記録されます。
同様の質問を見つけました:マイクロメータータイマーを使用して非同期メソッドの期間を記録する方法 (Mono または Flux を返します)が、そのような一般的な問題に対して答えが複雑すぎました
何か案は?
Micrometer タイマーを Webflux コントローラーで使用する簡単な方法はありますか?
@Timed は、非反応的なメソッドでのみ機能するようです。リアクティブの場合、非常に低い時間値が記録されます。
同様の質問を見つけました:マイクロメータータイマーを使用して非同期メソッドの期間を記録する方法 (Mono または Flux を返します)が、そのような一般的な問題に対して答えが複雑すぎました
何か案は?
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 アノテーションも機能しませんでした。