2

是否有任何简单的方法可以将 Micrometer 计时器与 Webflux 控制器一起使用?

似乎 @Timed 仅适用于非反应性方法。对于反应式,它记录的时间值非常低。

我发现了一个类似的问题:How to use Micrometer Timer to record duration of async method (returns Mono or 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();
   }
});

然后在我的例子中,石墨中的指标是在 application-name.magdalena 下。reactor.flow.duration.exception.flow.my-test-name.status.completed.type.Flux.p50 p50 - 是一半请求的延迟(或 98% pf 请求的 p98 延迟等)。感谢他们在此示例中的人为延迟,您可以观察到它们的值接近 4000(已处理 1s 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 回答