spring - 如何正确使用千分尺?
问题描述
假设我有一个 REST API 更新产品价格的应用程序。
我想使用千分尺将新价格作为指标公开。我无法从 Micrometer 文档中理解这应该如何完成。
唯一toDoubleFunction
对我有用的是在我的 ProductService 中创建一个返回它的价格的新方法。对于我想作为指标公开的每条数据,这似乎都是一种开销。
我在这里想念什么?为什么product.getPrice()
更新仪表还不够?
解决方案
千分尺Gauge
将引用它必须从中提取值的任何内容。默认情况下,该引用是 a WeakReference
。
例如:
这意味着如果您提供的值被垃圾收集,千分尺将无法从中轮询该值。
我假设当您调用时,product.getPrice();
您永远不会保留该值,只是将其传递给类似的东西,meterRegistry.gauge("product.price",tags,value);
因为在完成此代码块后,没有任何东西可以强烈引用该特定值,它会被垃圾收集(GC-ed)。
您在这里有几个解决方案:Gauge
使用构建器构建一个并指定strongReference(true)
或(更好地)确保您持有您的引用并自己管理它们的值。
两者都很奇怪,因为你最终会在内存中保存很多“仪表源”。
推荐阅读
- javascript - Javascript setTimeout 和 jQuery ajaxget 循环?
- amazon-web-services - 查看 S3 分析时是否考虑对 athena 的查询?
- inno-setup - 如何检测安装 VC Redist 软件包后是否需要提示用户重新启动 PC
- node.js - 为什么我的函数在 Node.js 中执行后我的数组会被擦除?
- swift - 如何将纹理存储模式设置为“私有”以从“CVMetalTextureCacheCreateTextureFromImage”创建纹理?
- php - 如何使用 Laravel 查询全局范围
- c - 无法从 C 中的另一个文件中找到函数
- angular - Angular 8:无法读取未定义的属性“包含”
- spring - Spring Security:本地配置文件基于令牌,但开发配置文件默认为用户名密码
- typescript - 编译器仍然认为 "x" 在 "if (x !== undefined)" 块中是未定义的