我正在尝试为反应流添加一个过滤器:
metrics()
成功向 IoC 注册:
public class FluxMetricsFilter implements MeterFilter {
private FluxMetricsConfigurationProperties fluxMetricsConfigurationProperties;
public FluxMetricsFilter(FluxMetricsConfigurationProperties fluxMetricsConfigurationProperties) {
this.fluxMetricsConfigurationProperties = fluxMetricsConfigurationProperties;
}
public DistributionStatisticConfig configure(Id id, DistributionStatisticConfig config) {
....
}
}
过滤器在 Prometheus 注册表中注册,但是当使用它时命中指标时,metrics()
它不使用 Prometheus 注册表而是使用全局注册表,Spring Boot 不会在全局级别注册过滤器:
因此,当我使用getOrCreateMeter
方法时,我的过滤器列表为空:
我可以看到metrics()
调用:
FluxMetrics(Flux<? extends T> flux) {
this(flux, null);
}
/**
* For testing purposes.
*
* @param registry the registry to use, or null for global one
*/
FluxMetrics(Flux<? extends T> flux, @Nullable MeterRegistry registry) {
super(flux);
this.name = resolveName(flux);
this.tags = resolveTags(flux, DEFAULT_TAGS_FLUX, this.name);
if (registry == null) {
this.registryCandidate = Metrics.globalRegistry;
}
else {
this.registryCandidate = registry;
}
}
所以指标注册表总是全球性的?因为我没有找到对第二个构造函数的任何调用。所以我不能指定要使用的注册表?
我知道如果这样做:
Metrics.globalRegistry.config().meterFilter(
new MeterFilter() {
@Override
public DistributionStatisticConfig configure(Meter.Id id, DistributionStatisticConfig config) {
...
}
});
它会起作用,但这不是春天的方式。任何人都可以帮助用 IoC 做正确的事吗?