Почему таймер MicroMeter возвращает ноль? - PullRequest
0 голосов
/ 17 марта 2019

Рассмотрим следующий код:

public static void main(String[] args) {
    Timer timer = Metrics.timer("item.processing");
    for (int i = 0; i < 100; i++) {
        timer.record(i, TimeUnit.SECONDS);
    }

    System.out.println(timer.count());
    System.out.println(timer.mean(TimeUnit.SECONDS));
}

Вывод равен нулю для обоих отпечатков, но, конечно, ожидается, что он будет положительным числом.

Я использую globalRegistry, но я не думаю, что это должно иметь значение.

1 Ответ

2 голосов
/ 17 марта 2019

Причина, по которой вы видите результаты, которые вы видите, заключается в том, что вы не зарегистрировали конкретную реализацию Реестра. Настройка по умолчанию для Micrometer не имеет определенной реализации реестра. Из-за этого ваши значения таймера просто сбрасываются на пол и не сохраняются.

Добавьте эту строку в качестве первой строки main (), и вы начнете получать ожидаемое поведение:

Metrics.addRegistry(new SimpleMeterRegistry());

вроде так:

public static void main(String ...args) {

    Metrics.addRegistry(new SimpleMeterRegistry());

    Timer timer = Metrics.timer("item.processing");
    for (int i = 0; i < 100; i++) {
        timer.record(i, TimeUnit.SECONDS);
    }

    System.out.println(timer.count());
    System.out.println(timer.mean(TimeUnit.SECONDS));
}

, который дает результаты:

100
49.5
...