Makes Zipkin ReporterMetrics lazy; fixes gh-2185

This commit is contained in:
Marcin Grzejszczak
2022-07-13 08:38:48 +02:00
parent 28fba56212
commit dd02c9db60

View File

@@ -36,6 +36,7 @@ import zipkin2.reporter.ReporterMetrics;
import zipkin2.reporter.Sender;
import zipkin2.reporter.metrics.micrometer.MicrometerReporterMetrics;
import org.springframework.beans.factory.ObjectProvider;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.boot.autoconfigure.AutoConfigureAfter;
@@ -255,8 +256,8 @@ public class ZipkinAutoConfiguration {
@Bean
@ConditionalOnBean(MeterRegistry.class)
@ConditionalOnClass(name = "zipkin2.reporter.metrics.micrometer.MicrometerReporterMetrics")
ReporterMetrics sleuthMicrometerReporterMetrics(MeterRegistry meterRegistry) {
return MicrometerReporterMetrics.create(meterRegistry);
ReporterMetrics sleuthMicrometerReporterMetrics(ObjectProvider<MeterRegistry> meterRegistry) {
return new LazyMicrometerReporterMetrics(meterRegistry);
}
@Bean
@@ -265,6 +266,65 @@ public class ZipkinAutoConfiguration {
return new InMemoryReporterMetrics();
}
static class LazyMicrometerReporterMetrics implements ReporterMetrics {
private final ObjectProvider<MeterRegistry> objectProvider;
private ReporterMetrics micrometerReporterMetrics;
LazyMicrometerReporterMetrics(ObjectProvider<MeterRegistry> objectProvider) {
this.objectProvider = objectProvider;
}
private ReporterMetrics reporterMetrics() {
if (this.micrometerReporterMetrics == null) {
this.micrometerReporterMetrics = MicrometerReporterMetrics.create(objectProvider.getObject());
}
return this.micrometerReporterMetrics;
}
@Override
public void incrementMessages() {
reporterMetrics().incrementMessages();
}
@Override
public void incrementMessagesDropped(Throwable throwable) {
reporterMetrics().incrementMessagesDropped(throwable);
}
@Override
public void incrementSpans(int i) {
reporterMetrics().incrementSpans(i);
}
@Override
public void incrementSpanBytes(int i) {
reporterMetrics().incrementSpanBytes(i);
}
@Override
public void incrementMessageBytes(int i) {
reporterMetrics().incrementMessageBytes(i);
}
@Override
public void incrementSpansDropped(int i) {
reporterMetrics().incrementSpansDropped(i);
}
@Override
public void updateQueuedSpans(int i) {
reporterMetrics().updateQueuedSpans(i);
}
@Override
public void updateQueuedBytes(int i) {
reporterMetrics().updateQueuedBytes(i);
}
}
}
}