Merge branch '6.1.x'

This commit is contained in:
Brian Clozel 2024-10-21 16:20:57 +02:00
commit ab2f1f8885
3 changed files with 17 additions and 16 deletions

View File

@ -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.
* <p>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);
}

View File

@ -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) {

View File

@ -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);