diff --git a/reactor-core-micrometer/src/main/java/reactor/core/observability/micrometer/Micrometer.java b/reactor-core-micrometer/src/main/java/reactor/core/observability/micrometer/Micrometer.java
index 6327f29fc7..215a510778 100644
--- a/reactor-core-micrometer/src/main/java/reactor/core/observability/micrometer/Micrometer.java
+++ b/reactor-core-micrometer/src/main/java/reactor/core/observability/micrometer/Micrometer.java
@@ -35,63 +35,16 @@
public final class Micrometer {
private static final String SCHEDULERS_DECORATOR_KEY = "reactor.core.observability.micrometer.schedulerDecorator";
- private static MeterRegistry registry = Metrics.globalRegistry;
/**
* The default "name" to use as a prefix for meter if the instrumented sequence doesn't define a {@link reactor.core.publisher.Flux#name(String) name}.
*/
public static final String DEFAULT_METER_PREFIX = "reactor";
- /**
- * Set the registry to use in reactor-core-micrometer for metrics related purposes.
- * @return the previously configured registry.
- * @deprecated in M4, will be removed in M5 / RC1. prefer your own singleton and explicitly
- * passing the registry to {@link #metrics(MeterRegistry, Clock)}
- */
- @Deprecated
- public static MeterRegistry useRegistry(MeterRegistry newRegistry) {
- MeterRegistry previous = registry;
- registry = newRegistry;
- return previous;
- }
-
- /**
- * Get the registry used in reactor-core-micrometer for metrics related purposes.
- *
- * @deprecated in M4, will be removed in M5 / RC1. prefer your own singleton and explicitly
- * passing the registry to {@link #metrics(MeterRegistry, Clock)}
- */
- @Deprecated
- public static MeterRegistry getRegistry() {
- return registry;
- }
-
- /**
- * A {@link SignalListener} factory that will ultimately produce Micrometer metrics
- * to the configured default {@link #getRegistry() registry}.
- * To be used with either the {@link reactor.core.publisher.Flux#tap(SignalListenerFactory)} or
- * {@link reactor.core.publisher.Mono#tap(SignalListenerFactory)} operator.
- *
- * When used in a {@link reactor.core.publisher.Flux#tap(SignalListenerFactory)} operator, meter names use
- * the {@link reactor.core.publisher.Flux#name(String)} set upstream of the tap as id prefix if applicable
- * or default to {@link #DEFAULT_METER_PREFIX}. Similarly, upstream tags are gathered and added
- * to the default set of tags for meters.
- *
- * Note that some monitoring systems like Prometheus require to have the exact same set of
- * tags for each meter bearing the same name.
- *
- * @param the type of onNext in the target publisher
- * @return a {@link SignalListenerFactory} to record metrics
- * @deprecated in M4, will be removed in M5 / RC1. prefer explicitly passing a registry via {@link #metrics(MeterRegistry, Clock)}
- */
- @Deprecated
- public static SignalListenerFactory metrics() {
- return new MicrometerMeterListenerFactory<>();
- }
-
/**
* A {@link SignalListener} factory that will ultimately produce Micrometer metrics
- * to the provided {@link MeterRegistry} using the provided {@link Clock} for timings.
+ * to the provided {@link MeterRegistry} (and using the registry's {@link MeterRegistry.Config#clock() configured}
+ * {@link Clock} in case additional timings are needed).
* To be used with either the {@link reactor.core.publisher.Flux#tap(SignalListenerFactory)} or
* {@link reactor.core.publisher.Mono#tap(SignalListenerFactory)} operator.
*
@@ -104,20 +57,11 @@ public static MeterRegistry getRegistry() {
* tags for each meter bearing the same name.
*
* @param the type of onNext in the target publisher
+ * @param meterRegistry the {@link MeterRegistry} in which to register and publish metrics
* @return a {@link SignalListenerFactory} to record metrics
*/
- public static SignalListenerFactory metrics(MeterRegistry registry, Clock clock) {
- return new MicrometerMeterListenerFactory() {
- @Override
- protected Clock useClock() {
- return clock;
- }
-
- @Override
- protected MeterRegistry useRegistry() {
- return registry;
- }
- };
+ public static SignalListenerFactory metrics(MeterRegistry meterRegistry) {
+ return new MicrometerMeterListenerFactory(meterRegistry);
}
/**
diff --git a/reactor-core-micrometer/src/main/java/reactor/core/observability/micrometer/MicrometerMeterListener.java b/reactor-core-micrometer/src/main/java/reactor/core/observability/micrometer/MicrometerMeterListener.java
index 68ad175c2b..4fd0c0204f 100644
--- a/reactor-core-micrometer/src/main/java/reactor/core/observability/micrometer/MicrometerMeterListener.java
+++ b/reactor-core-micrometer/src/main/java/reactor/core/observability/micrometer/MicrometerMeterListener.java
@@ -126,7 +126,7 @@ public void doOnNext(T t) {
}
//record the delay since previous onNext/onSubscribe. This also records the count.
long last = this.lastNextEventNanos;
- this.lastNextEventNanos = configuration.clock.monotonicTime();
+ this.lastNextEventNanos = configuration.registry.config().clock().monotonicTime();
this.onNextIntervalTimer.record(lastNextEventNanos - last, TimeUnit.NANOSECONDS);
}
@@ -138,8 +138,8 @@ public void doOnMalformedOnNext(T value) {
@Override
public void doOnSubscription() {
recordOnSubscribe(configuration.sequenceName, configuration.commonTags, configuration.registry);
- this.subscribeToTerminateSample = Timer.start(configuration.clock);
- this.lastNextEventNanos = configuration.clock.monotonicTime();
+ this.subscribeToTerminateSample = Timer.start(configuration.registry);
+ this.lastNextEventNanos = configuration.registry.config().clock().monotonicTime();
}
@Override
diff --git a/reactor-core-micrometer/src/main/java/reactor/core/observability/micrometer/MicrometerMeterListenerConfiguration.java b/reactor-core-micrometer/src/main/java/reactor/core/observability/micrometer/MicrometerMeterListenerConfiguration.java
index bf7992508d..6699700306 100644
--- a/reactor-core-micrometer/src/main/java/reactor/core/observability/micrometer/MicrometerMeterListenerConfiguration.java
+++ b/reactor-core-micrometer/src/main/java/reactor/core/observability/micrometer/MicrometerMeterListenerConfiguration.java
@@ -41,20 +41,20 @@ final class MicrometerMeterListenerConfiguration {
private static final Logger LOGGER = Loggers.getLogger(MicrometerMeterListenerConfiguration.class);
- static MicrometerMeterListenerConfiguration fromFlux(Flux> source, MeterRegistry meterRegistry, Clock clock) {
+ static MicrometerMeterListenerConfiguration fromFlux(Flux> source, MeterRegistry meterRegistry) {
Tags defaultTags = MicrometerMeterListener.DEFAULT_TAGS_FLUX;
final String name = resolveName(source, LOGGER, Micrometer.DEFAULT_METER_PREFIX);
final Tags tags = resolveTags(source, defaultTags);
- return new MicrometerMeterListenerConfiguration(name, tags, meterRegistry, clock, false);
+ return new MicrometerMeterListenerConfiguration(name, tags, meterRegistry, false);
}
- static MicrometerMeterListenerConfiguration fromMono(Mono> source, MeterRegistry meterRegistry, Clock clock) {
+ static MicrometerMeterListenerConfiguration fromMono(Mono> source, MeterRegistry meterRegistry) {
Tags defaultTags = MicrometerMeterListener.DEFAULT_TAGS_MONO;
final String name = resolveName(source, LOGGER, Micrometer.DEFAULT_METER_PREFIX);
final Tags tags = resolveTags(source, defaultTags);
- return new MicrometerMeterListenerConfiguration(name, tags, meterRegistry, clock, true);
+ return new MicrometerMeterListenerConfiguration(name, tags, meterRegistry, true);
}
/**
@@ -103,7 +103,6 @@ static Tags resolveTags(Publisher> source, Tags tags) {
return tags;
}
- final Clock clock;
final Tags commonTags;
final boolean isMono;
final String sequenceName;
@@ -112,9 +111,7 @@ static Tags resolveTags(Publisher> source, Tags tags) {
// separator is the dot, not camelCase...
final MeterRegistry registry;
- MicrometerMeterListenerConfiguration(String sequenceName, Tags tags, MeterRegistry registryCandidate, Clock clock,
- boolean isMono) {
- this.clock = clock;
+ MicrometerMeterListenerConfiguration(String sequenceName, Tags tags, MeterRegistry registryCandidate, boolean isMono) {
this.commonTags = tags;
this.isMono = isMono;
this.sequenceName = sequenceName;
diff --git a/reactor-core-micrometer/src/main/java/reactor/core/observability/micrometer/MicrometerMeterListenerFactory.java b/reactor-core-micrometer/src/main/java/reactor/core/observability/micrometer/MicrometerMeterListenerFactory.java
index 028549a506..8148067b2e 100644
--- a/reactor-core-micrometer/src/main/java/reactor/core/observability/micrometer/MicrometerMeterListenerFactory.java
+++ b/reactor-core-micrometer/src/main/java/reactor/core/observability/micrometer/MicrometerMeterListenerFactory.java
@@ -17,6 +17,7 @@
package reactor.core.observability.micrometer;
import io.micrometer.core.instrument.Clock;
+import io.micrometer.core.instrument.Meter;
import io.micrometer.core.instrument.MeterRegistry;
import org.reactivestreams.Publisher;
@@ -33,22 +34,19 @@
*/
class MicrometerMeterListenerFactory implements SignalListenerFactory {
- protected Clock useClock() {
- return Clock.SYSTEM;
- }
+ final MeterRegistry registry;
- @SuppressWarnings("deprecation")
- protected MeterRegistry useRegistry() {
- return Micrometer.getRegistry();
+ MicrometerMeterListenerFactory(MeterRegistry registry) {
+ this.registry = registry;
}
@Override
public MicrometerMeterListenerConfiguration initializePublisherState(Publisher extends T> source) {
if (source instanceof Mono) {
- return MicrometerMeterListenerConfiguration.fromMono((Mono>) source, useRegistry(), useClock());
+ return MicrometerMeterListenerConfiguration.fromMono((Mono>) source, this.registry);
}
else if (source instanceof Flux) {
- return MicrometerMeterListenerConfiguration.fromFlux((Flux>) source, useRegistry(), useClock());
+ return MicrometerMeterListenerConfiguration.fromFlux((Flux>) source, this.registry);
}
else {
throw new IllegalArgumentException("MicrometerMeterListenerFactory must only be used via the tap operator / with a Flux or Mono");
diff --git a/reactor-core-micrometer/src/test/java/reactor/core/observability/micrometer/MicrometerMeterListenerConfigurationTest.java b/reactor-core-micrometer/src/test/java/reactor/core/observability/micrometer/MicrometerMeterListenerConfigurationTest.java
index 153e41e167..dc32c79c6a 100644
--- a/reactor-core-micrometer/src/test/java/reactor/core/observability/micrometer/MicrometerMeterListenerConfigurationTest.java
+++ b/reactor-core-micrometer/src/test/java/reactor/core/observability/micrometer/MicrometerMeterListenerConfigurationTest.java
@@ -58,9 +58,9 @@ void fromFlux(@Nullable String name, @Nullable String tag) {
flux = flux.tag("tag", tag);
}
- MicrometerMeterListenerConfiguration configuration = MicrometerMeterListenerConfiguration.fromFlux(flux, expectedRegistry, expectedClock);
+ MicrometerMeterListenerConfiguration configuration = MicrometerMeterListenerConfiguration.fromFlux(flux, expectedRegistry);
- assertThat(configuration.clock).as("clock").isSameAs(expectedClock);
+ assertThat(configuration.registry.config().clock()).as("clock").isSameAs(expectedClock);
assertThat(configuration.registry).as("registry").isSameAs(expectedRegistry);
assertThat(configuration.isMono).as("isMono").isFalse();
@@ -100,9 +100,9 @@ void fromMono(@Nullable String name, @Nullable String tag) {
mono = mono.tag("tag", tag);
}
- MicrometerMeterListenerConfiguration configuration = MicrometerMeterListenerConfiguration.fromMono(mono, expectedRegistry, expectedClock);
+ MicrometerMeterListenerConfiguration configuration = MicrometerMeterListenerConfiguration.fromMono(mono, expectedRegistry);
- assertThat(configuration.clock).as("clock").isSameAs(expectedClock);
+ assertThat(configuration.registry.config().clock()).as("clock").isSameAs(expectedClock);
assertThat(configuration.registry).as("registry").isSameAs(expectedRegistry);
assertThat(configuration.isMono).as("isMono").isTrue();
diff --git a/reactor-core-micrometer/src/test/java/reactor/core/observability/micrometer/MicrometerMeterListenerFactoryTest.java b/reactor-core-micrometer/src/test/java/reactor/core/observability/micrometer/MicrometerMeterListenerFactoryTest.java
index e3a10926d5..52bf2b53ca 100644
--- a/reactor-core-micrometer/src/test/java/reactor/core/observability/micrometer/MicrometerMeterListenerFactoryTest.java
+++ b/reactor-core-micrometer/src/test/java/reactor/core/observability/micrometer/MicrometerMeterListenerFactoryTest.java
@@ -17,7 +17,7 @@
package reactor.core.observability.micrometer;
import io.micrometer.core.instrument.Clock;
-import io.micrometer.core.instrument.MeterRegistry;
+import io.micrometer.core.instrument.simple.SimpleConfig;
import io.micrometer.core.instrument.simple.SimpleMeterRegistry;
import org.junit.jupiter.api.Test;
import org.reactivestreams.Publisher;
@@ -36,34 +36,11 @@
*/
class MicrometerMeterListenerFactoryTest {
- @Test
- void useClockDefaultsToSystemClock() {
- MicrometerMeterListenerFactory> factory = new MicrometerMeterListenerFactory<>();
-
- assertThat(factory.useClock()).isSameAs(Clock.SYSTEM);
- }
-
- @Test
- void useRegistryDefaultsToCommonRegistry() {
- SimpleMeterRegistry commonRegistry = new SimpleMeterRegistry();
- MeterRegistry defaultCommon = Micrometer.useRegistry(commonRegistry);
- try {
- MicrometerMeterListenerFactory> factory = new MicrometerMeterListenerFactory<>();
-
- assertThat(factory.useRegistry()).isSameAs(Micrometer.getRegistry())
- .isSameAs(commonRegistry);
- }
- finally {
- Micrometer.useRegistry(defaultCommon);
- }
- }
-
@Test
void configurationFromMono() {
MicrometerMeterListenerConfiguration configuration = CUSTOM_FACTORY.initializePublisherState(Mono.just(1));
assertThat(configuration.registry).as("registry").isSameAs(CUSTOM_REGISTRY);
- assertThat(configuration.clock).as("clock").isSameAs(CUSTOM_CLOCK);
assertThat(configuration.isMono).as("isMono").isTrue();
assertThat(configuration.commonTags).map(Object::toString).containsExactly("tag(type=Mono)");
}
@@ -73,7 +50,6 @@ void configurationFromFlux() {
MicrometerMeterListenerConfiguration configuration = CUSTOM_FACTORY.initializePublisherState(Flux.just(1, 2));
assertThat(configuration.registry).as("registry").isSameAs(CUSTOM_REGISTRY);
- assertThat(configuration.clock).as("clock").isSameAs(CUSTOM_CLOCK);
assertThat(configuration.isMono).as("isMono").isFalse();
assertThat(configuration.commonTags).map(Object::toString).containsExactly("tag(type=Flux)");
}
@@ -106,17 +82,7 @@ public long monotonicTime() {
return 0;
}
};
- protected static final SimpleMeterRegistry CUSTOM_REGISTRY = new SimpleMeterRegistry();
+ protected static final SimpleMeterRegistry CUSTOM_REGISTRY = new SimpleMeterRegistry(SimpleConfig.DEFAULT, CUSTOM_CLOCK);
protected static final MicrometerMeterListenerFactory