说我有一个REST API更新产品价格的应用程序。
我想使用千分尺将新价格公开为指标。我无法从Micrometer文档中了解如何完成此操作。
唯一对我有用的toDoubleFunction
是在我的ProductService中创建一个新方法,该方法返回其价格。这似乎是我要作为指标公开的每条数据的开销。
我在这里想念什么?为什么product.getPrice()
不足以更新量规?
答案 0 :(得分:0)
千分尺的Gauge
将保留对其取值的引用。并且该引用默认为WeakReference
。
例如:
这意味着如果您提供的值被垃圾回收了,千分尺将没有任何东西可以轮询该值。
我认为,当您调用product.getPrice();
时,您永远不会保留该值,而只是将其传递给类似meterRegistry.gauge("product.price",tags,value);
的东西,因为在此代码块完成之后,没有什么东西可以强烈引用该特定值了它会收集垃圾(GC版)。
您在这里有几种解决方案:要么使用构建器构建Gauge
并指定strongReference(true)
,要么(最好)确保自己保留引用并自己管理它们的值。
两者都很奇怪,因为您最终将在内存中保存很多“仪表源”。