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 连接

MicroProfile 的配置:如何注入自定义对象列表

Quarkus & Microprofile:有没有更好的方法将 application.properties 中的属性用于@ClientHeaderParam?

如何将配置中的集合转换为 Microprofile/Quarkus/Smallrye 中的环境变量

如何使用 java-ee8、microProfile 4.0、Openliberty 21 和 Docker 设置特定于阶段的微配置文件配置

无法在 Microprofile Rest Client 中映射/获取 422 错误代码上的响应实体