当前位置: 首页 > 知识库问答 >
问题:

Microprofile(SmallRye)@Gauge,但未被metrics基础设施调用

步骏
2023-03-14

我正在一个使用Quarkus版本1.7.3的项目中使用SmallRye实现Eclipse微文件度量。我需要收集ApplicationScoped类中的方法返回的随机整数值作为度量,但当我使用@Gauge时,度量基础结构会调用该方法。它对我不起作用,因为我需要为该方法提供一个参数,这样它才有意义。当方法由我自己的应用程序调用而不是由微文件实现调用时,是否有方法收集此度量?

在我的场景中,我向外部API发送一个项目,并等待它们使用我的API做出响应。这是异步的,应该至少需要2分钟和5到6分钟的时间,但有时可能需要几分钟。因此,当我收到响应时,我首先从数据库中检索项目,在我做任何需要做的事情之前,我调用timeWaitingForResponseMinutes方法,将我刚从数据库中检索到的项目作为参数传递:

    @Gauge(name = "timeWaitingForResponseMinutes", description = "Time waiting for a response for the Item in minutes", unit = MetricUnits.NONE)
    public Integer timeWaitingForResponseMinutes(Item item) {
        Timestamp nowTimestamp = Timestamp.from(Instant.now());
        long nowMilliseconds = nowTimestamp.getTime();
        long itemMilliseconds = item.getTimestampItemSent().getTime();
        Integer minutesWaiting = (int)((nowMilliseconds - itemMilliseconds) / (60 * 1000));
        return minutesWaiting;
    }

这个项目有一个java。sql。时间戳字段,名为timestampItemSent,用于与当前时间进行比较。@Gauge不是这样工作的,因为该方法应该没有参数。我正在接收错误消息:无法导出公制公司\控制器\项目控制器\时间等待响应名称:java。lang.IllegalArgumentException

任何帮助都将不胜感激。

共有1个答案

陆子航
2023-03-14

本质上,您需要对代码中由两种不同方法定义的跨度进行计时,一种用于开始跨度,另一种用于结束跨度。我不认为这是可行的注释,但它是可行的一点编程。您可以在CDIBean中注入一个度量,因此我将修改timeWaitingForResponseMinutes,如下所示:

import org.eclipse.microprofile.metrics.Timer;
import java.util.concurrent.TimeUnit;

@ApplicationScoped
public class MyResponseTimer {
    @Inject
    @Metric(name = "timeWaitingForResponseMinutes", description = "Time waiting for a response for the Item in minutes", unit = MetricUnits.MINUTES)
    private Timer timer;

    public void timeWaitingForResponseMinutes(Item item) {
        Timestamp nowTimestamp = Timestamp.from(Instant.now());
        long nowMilliseconds = nowTimestamp.getTime();
        long itemMilliseconds = item.getTimestampItemSent().getTime();
        long minutesWaiting = ((nowMilliseconds - itemMilliseconds) / (60 * 1000));
        timer.update(minutesWaiting, TimeUnit.MINUTES);
    }
}

现在注入这个bean,只需根据需要调用timeWaitingForResponseMinutes,传递。(你会看到许多你自己的代码,但是请注意,我将度量单位改为分钟,以便有意义)

 类似资料:
  • 内存池 简介: Nginx里内存的使用大都十分有特色:申请了永久保存,抑或伴随着请求的结束而全部释放,还有写满了缓冲再从头接着写.这么做的原因也主要取决于Web Server的特殊的场景,内存的分配和请求相关,一条请求处理完毕,即可释放其相关的内存池,降低了开发中对内存资源管理的复杂度,也减少了内存碎片的存在. 所以在Nginx使用内存池时总是只申请,不释放,使用完毕后直接destroy整个内存池

  • Computers in the future may have as few as 1,000 vacuum tubes and weigh only 1.5 tons. — Popular Mechanics (1949) 在本章中,我们将学习如下内容: 使用版本控制 使用提交钩子 使用 Rake 部署变更 配置 Puppet 的文件服务器 从 cron 运行 Puppet 使用自动签名 预签

  • MicroProfile Metrics 是 MicroProfile 的指标规范,其旨在为 Microprofile 服务器提供统一的方式,将监控数据(“遥测”)导出到管理代理,并提供统一的 Java API,所有应用与程序员都可以使用它来暴露他们的遥测数据。

  • ngrok运行全球分布式隧道服务器,为您的应用程序提供快速,低延迟的流量。 地点 ngrok运行世界各地数据中心的隧道服务器。数据中心在给定区域内的位置可能改变而不通知(例如,欧洲服务器可能从法兰克福移动到伦敦)。 us - United States (Dallas) eu - Europe (Frankfurt) ap - Asia/Pacific (Singapore) au - Austr

  • 链接 集成EntityFramework 集成NHibernate 集成EntityFramework Core 集成EntityFramework MySQL 集成Dapper

  • 自由软件项目依赖于选择性捕获和信息集成的技术。对这些技术的使用越是熟练,并说服别人去使用这些技术,你的项目就越成功。随着项目的成长,这一点愈发正确。好的信息管理系统应该能够防止开源项目在布鲁克法则的重压下崩塌[12] ,也就是说向一个已经延期的项目增加人力,只能使项目延期更多。佛雷德·布鲁克观察到,项目的复杂性同参与人员数量的平方成正比。当项目中只有少数几个人时,大家可以容易的互相交谈,但当有上百