diff --git a/spring-jms/src/main/java/org/springframework/jms/listener/AbstractMessageListenerContainer.java b/spring-jms/src/main/java/org/springframework/jms/listener/AbstractMessageListenerContainer.java index f3eb194b7f0..77addbd7691 100644 --- a/spring-jms/src/main/java/org/springframework/jms/listener/AbstractMessageListenerContainer.java +++ b/spring-jms/src/main/java/org/springframework/jms/listener/AbstractMessageListenerContainer.java @@ -676,16 +676,21 @@ public abstract class AbstractMessageListenerContainer extends AbstractJmsListen * @see #handleListenerException */ protected void executeListener(Session session, Message message) { - createObservation(message).observe(() -> { - try { - doExecuteListener(session, message); - } - catch (Throwable ex) { - handleListenerException(ex); - } - }); + try { + doExecuteListener(session, message); + } + catch (Throwable ex) { + handleListenerException(ex); + } } + /** + * Create, but do not start an {@link Observation} for JMS message processing. + *
This will return a "no-op" observation if Micrometer Jakarta instrumentation + * is not available or if no Observation Registry has been configured. + * @param message the message to be observed + * @since 6.1 + */ protected Observation createObservation(Message message) { if (micrometerJakartaPresent && this.observationRegistry != null) { return ObservationFactory.create(this.observationRegistry, message); @@ -770,7 +775,6 @@ public abstract class AbstractMessageListenerContainer extends AbstractJmsListen Connection conToClose = null; Session sessionToClose = null; - Observation observation = createObservation(message); try { Session sessionToUse = session; if (micrometerJakartaPresent && this.observationRegistry != null) { @@ -782,7 +786,6 @@ public abstract class AbstractMessageListenerContainer extends AbstractJmsListen sessionToClose = createSession(conToClose); sessionToUse = sessionToClose; } - observation.start(); // Actually invoke the message listener... listener.onMessage(message, sessionToUse); // Clean up specially exposed Session, if any. @@ -794,11 +797,9 @@ public abstract class AbstractMessageListenerContainer extends AbstractJmsListen } } catch (JMSException exc) { - observation.error(exc); throw exc; } finally { - observation.stop(); JmsUtils.closeSession(sessionToClose); JmsUtils.closeConnection(conToClose); } diff --git a/spring-jms/src/main/java/org/springframework/jms/listener/SimpleMessageListenerContainer.java b/spring-jms/src/main/java/org/springframework/jms/listener/SimpleMessageListenerContainer.java index e658066dde4..08881612ab7 100644 --- a/spring-jms/src/main/java/org/springframework/jms/listener/SimpleMessageListenerContainer.java +++ b/spring-jms/src/main/java/org/springframework/jms/listener/SimpleMessageListenerContainer.java @@ -353,7 +353,7 @@ public class SimpleMessageListenerContainer extends AbstractMessageListenerConta connectionFactory, new LocallyExposedJmsResourceHolder(session)); } try { - executeListener(session, message); + createObservation(message).observe(() -> executeListener(session, message)); } finally { if (exposeResource) { diff --git a/spring-jms/src/test/java/org/springframework/jms/listener/MessageListenerContainerObservationTests.java b/spring-jms/src/test/java/org/springframework/jms/listener/MessageListenerContainerObservationTests.java index 1110b654744..4aa175e317d 100644 --- a/spring-jms/src/test/java/org/springframework/jms/listener/MessageListenerContainerObservationTests.java +++ b/spring-jms/src/test/java/org/springframework/jms/listener/MessageListenerContainerObservationTests.java @@ -74,7 +74,8 @@ class MessageListenerContainerObservationTests { JmsTemplate jmsTemplate = new JmsTemplate(connectionFactory); jmsTemplate.convertAndSend("spring.test.observation", "message content"); latch.await(2, TimeUnit.SECONDS); - assertThat(registry).hasObservationWithNameEqualTo("jms.message.process") + assertThat(registry).hasNumberOfObservationsWithNameEqualTo("jms.message.process", 1) + .hasObservationWithNameEqualTo("jms.message.process") .that() .hasHighCardinalityKeyValue("messaging.destination.name", "spring.test.observation"); assertThat(registry).hasNumberOfObservationsEqualTo(1); @@ -98,8 +99,7 @@ class MessageListenerContainerObservationTests { TextMessage response = (TextMessage) jmsTemplate.sendAndReceive("spring.test.observation", session -> session.createTextMessage("test request")); - // request received by listener and response received by template - assertThat(registry).hasNumberOfObservationsWithNameEqualTo("jms.message.process", 2); + assertThat(registry).hasNumberOfObservationsWithNameEqualTo("jms.message.process", 1); // response sent to the template assertThat(registry).hasNumberOfObservationsWithNameEqualTo("jms.message.publish", 1);