Skip to content

Commit 56a41f3

Browse files
authored
Add start/stop count metrics to AbstractMessageListenerContainer
Adds two Micrometer counters to AbstractMessageListenerContainer to track listener container lifecycle events: - spring.kafka.container.start.count: incremented each time a container is successfully started via doStart() - spring.kafka.container.stop.count: incremented each time a container is stopped, covering both wait=true and wait=false paths Closes #4277 Signed-off-by: Vineeth Yelagandula <111960524+Yelagandula@users.noreply.github.com>
1 parent 813b9af commit 56a41f3

1 file changed

Lines changed: 15 additions & 0 deletions

File tree

spring-kafka/src/main/java/org/springframework/kafka/listener/AbstractMessageListenerContainer.java

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,9 @@
3232
import java.util.regex.Pattern;
3333
import java.util.stream.Collectors;
3434

35+
import io.micrometer.core.instrument.Counter;
36+
import io.micrometer.core.instrument.Metrics;
37+
3538
import org.apache.commons.logging.LogFactory;
3639
import org.apache.kafka.clients.admin.AdminClient;
3740
import org.apache.kafka.clients.admin.AdminClientConfig;
@@ -145,6 +148,14 @@ public abstract class AbstractMessageListenerContainer<K, V>
145148
@Nullable
146149
private KafkaAdmin kafkaAdmin;
147150

151+
private final Counter startCounter = Counter.builder("spring.kafka.container.start.count")
152+
.description("The number of times this listener container has been started")
153+
.register(Metrics.globalRegistry);
154+
155+
private final Counter stopCounter = Counter.builder("spring.kafka.container.stop.count")
156+
.description("The number of times this listener container has been stopped")
157+
.register(Metrics.globalRegistry);
158+
148159
/**
149160
* Construct an instance with the provided factory and properties.
150161
* @param consumerFactory the factory.
@@ -530,6 +541,8 @@ public final void start() {
530541
() -> "A " + GenericMessageListener.class.getName() + " implementation must be provided");
531542
Assert.state(!this.fenced, "Container Fenced. It is not allowed to start.");
532543
doStart();
544+
this.startCounter.increment();
545+
533546
}
534547
}
535548
finally {
@@ -633,6 +646,7 @@ public final void stop(boolean wait) {
633646
try {
634647
latch.await(this.containerProperties.getShutdownTimeout(), TimeUnit.MILLISECONDS); // NOSONAR
635648
publishContainerStoppedEvent();
649+
this.stopCounter.increment();
636650
}
637651
catch (@SuppressWarnings("unused") InterruptedException e) {
638652
Thread.currentThread().interrupt();
@@ -642,6 +656,7 @@ public final void stop(boolean wait) {
642656
this.lifecycleLock.lock();
643657
try {
644658
doStop(this::publishContainerStoppedEvent);
659+
this.stopCounter.increment();
645660
}
646661
finally {
647662
this.lifecycleLock.unlock();

0 commit comments

Comments
 (0)