我有一个带有 Micrometer 的响应式(Reactive) Spring Webflux 应用程序。
我想创建一个“计量”指标,例如:
Gauge gauge = Gauge
.builder("gaugeName", list, List::size)
.register(registry);
或供应商版本,例如:
Gauge gauge = Gauge
.builder("gaugeName", () -> getValue())
.register(registry);
但是,我有一个值的异步源,即返回 Mono 的方法。
如何从异步值创建千分尺?
最佳答案
目前我只找到以下解决方案:
- 使用返回
Number
子类型的gauge()
方法在仪表注册表中注册仪表
AtomicLong gauge = meterRegistry.gauge("name", new AtomicLong(0));
- 现在可以使用
set()
方法手动更新它
gauge.set(value);
- 创建一个计划任务,该任务将运行 react 链并根据固定时间间隔更新仪表:
@Scheduled
public void scheduleTask() {
Mono.from(getValue()).subscribe(value -> gauge.set(value));
}
步骤 1-2 取自此处:https://micrometer.io/docs/concepts#_manually_incrementingdecrementing_a_gauge
第 3 步取自此处:https://spring.io/guides/gs/scheduling-tasks/
该方法有明显的缺点:
- 指标会急切更新,而不是按需更新
- 指标不显示实际值,并且总是滞后于时间
如果有人建议一种更好的方法来创建基于异步计算值的千分尺,我将不胜感激。
关于java - 如何从异步值创建千分尺?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68532426/