Как использовать таймер микрометра вместе с конечными точками webflux - PullRequest
0 голосов
/ 22 октября 2018

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

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

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

Есть идеи?

1 Ответ

0 голосов
/ 10 мая 2019

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

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

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

@ Синхронизированная аннотация тоже не сработала.

...