【问题标题】:How to use Micrometer @Timed annotation outside of Spring, in a Java Application [duplicate]如何在Java应用程序中在Spring之外使用Micrometer @Timed注释[重复]
【发布时间】:2021-08-07 01:52:16
【问题描述】:

我正在尝试使用Micrometer 在我的 Java 应用程序中记录信息。

我的应用程序主中的千分尺注册表初始化如下:

MeterRegistry registry = new SimpleMeterRegistry();

我有一个类 CountedObject,它有一个 int id 和一个对 registry 的引用。

在我的班级 CountedObject 我有一个名为 timedFunction() 的方法,如下所示:

@Timed(value = "myTimer")
public void timedFunction() {
    try {
        int sleepTime = new Random().nextInt(5) + 1;
        Thread.sleep(sleepTime * 1000L);
    } catch (InterruptedException e) {}
    System.out.println("timedFunction");
}

还有一个名为timedFunction()的方法如下:

public void timeConsumingFunction() {
    LongTaskTimer longTaskTimer = AppMetrics.getInstance().getLongTaskTimer("longTaskTimer1");
    Sample task = longTaskTimer.start();
    
    try {
        int sleepTime = new Random().nextInt(5) + 1;
        Thread.sleep(sleepTime * 1000L);
    } catch (InterruptedException e) {}
    
    System.out.println("timeConsumingFunction() for object-" + id + " took: " + task.duration(TimeUnit.SECONDS));
    task.stop();
}

在我的应用程序中,我创建了一个对象 CountedObject 并运行这两种方法。

然后我运行以下命令来打印所有指标信息:

List<Meter> meters = registry.getMeters();
    
for (Meter meter : meters) {
    System.out.println(meter.getId());
    for (Measurement measurement : meter.measure()) {
        System.out.println(measurement.getStatistic() + " : " + measurement.getValue());
    }
    System.out.println("\n");
}

我只在指标中找到 "longTaskTimer1",而注释方法中使用的 myTimer 不存在。如何使用此 @Timed 注释以及如何将其链接到我的应用程序的寄存器

【问题讨论】:

    标签: java annotations instrumentation micrometer


    【解决方案1】:

    您需要设置TimedAspect 来处理@Timed 注释。 如果您使用的是 Spring,只需创建一个 TimedAspect @Bean 就可以了。如果不这样做,则需要自己设置 AspectJ。

    【讨论】:

    • 当实现我的注释 @MeasuredMeasuredAspect 时,它会拦截我的注释。但是我需要使用 micrometer 的TimedAspect
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-14
    • 1970-01-01
    • 2021-03-14
    • 1970-01-01
    • 2019-06-06
    • 2022-07-07
    相关资源
    最近更新 更多