Skip to content

Commit 10e8039

Browse files
committed
Merge branch '6.1.x'
2 parents 2086cda + a78704a commit 10e8039

File tree

2 files changed

+38
-2
lines changed

2 files changed

+38
-2
lines changed

spring-jms/src/main/java/org/springframework/jms/listener/AbstractPollingMessageListenerContainer.java

+6-1
Original file line numberDiff line numberDiff line change
@@ -339,7 +339,12 @@ protected boolean doReceiveAndExecute(Object invoker, @Nullable Session session,
339339
}
340340
status.setRollbackOnly();
341341
}
342-
handleListenerException(ex);
342+
try {
343+
handleListenerException(ex);
344+
}
345+
catch (Throwable throwable) {
346+
observation.error(throwable);
347+
}
343348
// Rethrow JMSException to indicate an infrastructure problem
344349
// that may have to trigger recovery...
345350
if (ex instanceof JMSException jmsException) {

spring-jms/src/test/java/org/springframework/jms/listener/MessageListenerContainerObservationTests.java

+32-1
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,7 @@ void shouldRecordJmsProcessObservations(AbstractMessageListenerContainer listene
7676
assertThat(registry).hasObservationWithNameEqualTo("jms.message.process")
7777
.that()
7878
.hasHighCardinalityKeyValue("messaging.destination.name", "spring.test.observation");
79+
assertThat(registry).hasNumberOfObservationsEqualTo(1);
7980
listenerContainer.stop();
8081
listenerContainer.shutdown();
8182
}
@@ -103,7 +104,37 @@ void shouldHaveObservationScopeInErrorHandler(AbstractMessageListenerContainer l
103104
Assertions.assertThat(observationInErrorHandler.get()).isNotNull();
104105
assertThat(registry).hasObservationWithNameEqualTo("jms.message.process")
105106
.that()
106-
.hasHighCardinalityKeyValue("messaging.destination.name", "spring.test.observation");
107+
.hasHighCardinalityKeyValue("messaging.destination.name", "spring.test.observation")
108+
.hasLowCardinalityKeyValue("exception", "none");
109+
assertThat(registry).hasNumberOfObservationsEqualTo(1);
110+
listenerContainer.stop();
111+
listenerContainer.shutdown();
112+
}
113+
114+
@ParameterizedTest(name = "[{index}] {0}")
115+
@MethodSource("listenerContainers")
116+
void shouldHaveObservationErrorWhenRethrown(AbstractMessageListenerContainer listenerContainer) throws Exception {
117+
JmsTemplate jmsTemplate = new JmsTemplate(connectionFactory);
118+
jmsTemplate.convertAndSend("spring.test.observation", "message content");
119+
CountDownLatch latch = new CountDownLatch(1);
120+
listenerContainer.setConnectionFactory(connectionFactory);
121+
listenerContainer.setObservationRegistry(registry);
122+
listenerContainer.setDestinationName("spring.test.observation");
123+
listenerContainer.setMessageListener((MessageListener) message -> {
124+
throw new IllegalStateException("error");
125+
});
126+
listenerContainer.setErrorHandler(error -> {
127+
latch.countDown();
128+
throw new IllegalStateException("not handled");
129+
});
130+
listenerContainer.afterPropertiesSet();
131+
listenerContainer.start();
132+
latch.await(2, TimeUnit.SECONDS);
133+
assertThat(registry).hasObservationWithNameEqualTo("jms.message.process")
134+
.that()
135+
.hasHighCardinalityKeyValue("messaging.destination.name", "spring.test.observation")
136+
.hasLowCardinalityKeyValue("exception", "IllegalStateException");
137+
assertThat(registry).hasNumberOfObservationsEqualTo(1);
107138
listenerContainer.stop();
108139
listenerContainer.shutdown();
109140
}

0 commit comments

Comments
 (0)