为什么MicroMeter Timer返回零?

时间:2019-03-17 13:53:56

标签: java micrometer spring-micrometer

考虑以下代码:

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 个答案:

答案 0 :(得分:2)

看到结果的原因是您尚未注册具体的注册表实现。 Micrometer的默认设置未定义支持的注册表实现。因此,您的Timer值只会掉落在地板上,而不会保留。

将此行添加为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