如何与Webflux端点一起使用Micrometer计时器

时间:2018-10-22 15:17:44

标签: java spring-webflux project-reactor micrometer

有没有简单的方法可以将千分尺计时器与Webflux控制器一起使用?

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

我发现了一个类似的问题:How to use Micrometer Timer to record duration of async method (returns Mono or Flux),但是对于如此常见的问题,答案太复杂了

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

如果您想测量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 < / strong> p50-是一半请求的延迟(或p98请求的98%的延迟等)。感谢他们在这个示例中的人为延迟,您可以观察到它们的值接近4000(处理1s x 4个元素)。

application.yml中石墨的配置:

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

@Timed注释对我也无效。