在记录块内引发异常时,千分尺计时器是不是记录?

Posted

技术标签:

【中文标题】在记录块内引发异常时,千分尺计时器是不是记录?【英文标题】:Does Micrometer timer records when exception is thrown inside of the record block?在记录块内引发异常时,千分尺计时器是否记录? 【发布时间】:2021-12-13 09:21:26 【问题描述】:

只是一个简单的例子:

fun main(): String? 
    val response: String? = null
    meterRegistry.timer("name").record 
        response = getResponse() // throws exception
    
    return response

在这种情况下 getResponse() 会抛出异常,并且 main 方法中没有捕获。 它仍然记录到grafana吗?

【问题讨论】:

【参考方案1】:

看着source code…

@Override
public void record(Runnable f) 
    final long s = clock.monotonicTime();
    try 
        f.run();
     finally 
        final long e = clock.monotonicTime();
        record(e - s, TimeUnit.NANOSECONDS);
    

...您可以看到,在异常情况下也会记录时间(因为finally 块)。

【讨论】:

以上是关于在记录块内引发异常时,千分尺计时器是不是记录?的主要内容,如果未能解决你的问题,请参考以下文章

千分尺和普罗米修斯计时器作为速率

如何停止在 C# 类中运行的计时器

iOS 毫秒倒计时列表

使用jQuery计时器通过PHP检查数据库以获取新记录?

iOS快速实现一个保存记录的倒计时按钮

求助PHP倒计时程序