我正在寻找如何将配置参数从 Quarkus 中的 yaml 文件插入到 Quarkus 中定时注释中的数字 double[] 参数,例如百分位参数
@Timed(value = "some_metric", percentiles = {0.90, 0.95})
类似的东西
@Timed(value = "some_metric", percentiles = "${percentile.default.setting}")
但显然不被接受,因为百分位数不是字符串参数
有什么办法可以解决这个问题吗?
创建自定义
MeterFilter
解决了这个问题。
以下类可以通过应用程序配置覆盖
percentiles
值。
自定义百分位数可以配置为
metrics.[metric-name].percentiles
,例如:
my-metrics:
second_metric:
percentiles:
- 0.50
- 0.60
- 0.90
@Singleton
public class CustomMeterFilter {
@SuppressWarnings("unchecked")
private static final Class<double[]> configClass = (Class<double[]>) Array.newInstance(double.class, 0).getClass();
@Produces
@Singleton
public MeterFilter customPercentiles() {
return new MeterFilter() {
@Override
public DistributionStatisticConfig configure(Meter.Id id, DistributionStatisticConfig config) {
return ConfigProvider.getConfig()
.getOptionalValue(String.format("my-metrics.%s.percentiles", id.getName()), configClass)
.map(percentiles -> DistributionStatisticConfig.builder()
.percentiles(percentiles)
.build()
.merge(config))
.orElse(config);
}
};
}
}
更多选项可参见官方文档