Как использовать таймер Micrometer вместе с конечными точками webflux

Есть ли простой способ использовать таймеры Micrometer с контроллерами Webflux?

Похоже, что @Timed работает только с нереактивными методами. Для реактивного режима он записывает очень низкие значения времени.

Я нашел похожий вопрос: Как использовать таймер микрометра для записи продолжительности асинхронного метода (возвращает Mono или Flux), но ответы были слишком сложными для такой распространенной проблемы

Любые идеи?


person evgeniy44    schedule 22.10.2018    source источник
comment
И в Mono, и в Flux есть метод metrics(), который собирает и публикует метрики о продолжительности, прошедшей между подпиской и завершением последовательности onComplete в Micrometer. Вы пробовали это?   -  person Ilya Zinkovich    schedule 23.10.2018
comment
У вас есть реактивные конечные точки http? Если да, то измерить несложно.   -  person vanillaSugar    schedule 06.11.2018


Ответы (1)


Если вы хотите измерить время для методов / вызовов 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. Reaction.flow.duration.exception.flow.my-test-name.status.completed.type.Flux.p50 p50 - это задержка для половины запросов (или задержка p98 для 98% от запроса). Благодаря искусственной задержке в этом примере вы можете заметить, что их значения близки к 4000 (обработано 1 с x 4 элемента).

Конфигурация в application.yml для графита:

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

Аннотации @Timed у меня тоже не сработали.

person m.a.tomsik    schedule 10.05.2019