Microprofile Config:容错度量标签的动态 ConfigSource 值
Posted
技术标签:
【中文标题】Microprofile Config:容错度量标签的动态 ConfigSource 值【英文标题】:Microprofile Config: Dynamic ConfigSource values for faulttolerance metric tags 【发布时间】:2021-03-14 11:26:40 【问题描述】:我目前正在研究为微配置文件容错框架设置指标标记的解决方案。我们将它与指标一起使用,但不能通过容错注释直接设置标签。
所以我们想出了一个解决方法,通过拦截器设置ThreadLocal
值,然后由自定义ConfigSource
读取。 ConfigSource
在其 getValue(final String propertyName)
方法中检查 "mp.metrics.tags"
和 "MP_METRICS_TAGS"
配置键。如果每次处理容错注释时都会调用getValue
,这基本上可以工作。但似乎情况并非如此,该方法的调用是随机发生的。
在我看来,ConfigSources 和他们的getValue(final String propertyName)
应该总是被调用,因为开发人员可能依赖于每秒都会改变的配置值。
知道为什么不调用配置源吗?
【问题讨论】:
【参考方案1】:看起来自定义ConfigSource
在多次返回null
时或至少在服务器启动阶段不再被调用。在提到的场景中,这可以通过返回一个空字符串来绕过。然后,ConfigSource
也会在运行时为每个 getValue()
方法调用调用。
【讨论】:
【参考方案2】:MicroProfile Config 1.4 specification indicates that no caching of a ConfigSource
's value should occur,因此,如果您的 MicroProfile 配置 Config
实现(您没有说它是哪个实现)正在缓存对 ConfigSource#getValue()
的调用结果,则它不符合要求,据我所知(规范有缺陷,不是很严格,TCK 参差不齐,但在这个问题上似乎很清楚)。
(请注意,给定的ConfigSource
实现当然可能决定从其getValue()
方法返回缓存值。)
【讨论】:
猜测这种情况下的问题是微配置文件指标(或容错)本身缓存配置值。经过多次尝试后,似乎配置源 getValue 被随机调用。所以容错或度量框架内部可能存在一些尴尬的逻辑。以上是关于Microprofile Config:容错度量标签的动态 ConfigSource 值的主要内容,如果未能解决你的问题,请参考以下文章
Microprofile 的 Open Liberty 实现中的 MySql 连接
Quarkus & Microprofile:有没有更好的方法将 application.properties 中的属性用于@ClientHeaderParam?
如何将配置中的集合转换为 Microprofile/Quarkus/Smallrye 中的环境变量
如何使用 java-ee8、microProfile 4.0、Openliberty 21 和 Docker 设置特定于阶段的微配置文件配置