37
37
import org .springframework .jms .support .QosSettings ;
38
38
import org .springframework .jms .support .converter .MessageConverter ;
39
39
import org .springframework .lang .Nullable ;
40
+ import org .springframework .util .ClassUtils ;
40
41
import org .springframework .util .ErrorHandler ;
41
42
42
43
/**
149
150
public abstract class AbstractMessageListenerContainer extends AbstractJmsListeningContainer
150
151
implements MessageListenerContainer {
151
152
152
- private static final JmsProcessObservationConvention DEFAULT_CONVENTION = new DefaultJmsProcessObservationConvention ();
153
+ private static final boolean micrometerCorePresent = ClassUtils .isPresent (
154
+ "io.micrometer.core.instrument.binder.jms.JmsInstrumentation" , AbstractMessageListenerContainer .class .getClassLoader ());
153
155
154
156
@ Nullable
155
157
private volatile Object destination ;
@@ -703,8 +705,7 @@ protected void doExecuteListener(Session session, Message message) throws JMSExc
703
705
}
704
706
705
707
try {
706
- Observation observation = JmsObservationDocumentation .JMS_MESSAGE_PROCESS
707
- .observation (null , DEFAULT_CONVENTION , () -> new JmsProcessObservationContext (message ), this .observationRegistry );
708
+ Observation observation = createObservation (message );
708
709
observation .observeChecked (() -> invokeListener (session , message ));
709
710
}
710
711
catch (JMSException | RuntimeException | Error ex ) {
@@ -714,6 +715,15 @@ protected void doExecuteListener(Session session, Message message) throws JMSExc
714
715
commitIfNecessary (session , message );
715
716
}
716
717
718
+ private Observation createObservation (Message message ) {
719
+ if (micrometerCorePresent ) {
720
+ return ObservationFactory .create (this .observationRegistry , message );
721
+ }
722
+ else {
723
+ return Observation .NOOP ;
724
+ }
725
+ }
726
+
717
727
/**
718
728
* Invoke the specified listener: either as standard JMS MessageListener
719
729
* or (preferably) as Spring SessionAwareMessageListener.
@@ -758,8 +768,7 @@ protected void doInvokeListener(SessionAwareMessageListener listener, Session se
758
768
759
769
Connection conToClose = null ;
760
770
Session sessionToClose = null ;
761
- Observation observation = JmsObservationDocumentation .JMS_MESSAGE_PROCESS
762
- .observation (null , DEFAULT_CONVENTION , () -> new JmsProcessObservationContext (message ), this .observationRegistry );
771
+ Observation observation = createObservation (message );
763
772
try {
764
773
Session sessionToUse = session ;
765
774
if (!isExposeListenerSession ()) {
@@ -982,4 +991,14 @@ protected void invokeErrorHandler(Throwable ex) {
982
991
private static class MessageRejectedWhileStoppingException extends RuntimeException {
983
992
}
984
993
994
+ private static abstract class ObservationFactory {
995
+
996
+ private static final JmsProcessObservationConvention DEFAULT_CONVENTION = new DefaultJmsProcessObservationConvention ();
997
+
998
+ static Observation create (@ Nullable ObservationRegistry registry , Message message ) {
999
+ return JmsObservationDocumentation .JMS_MESSAGE_PROCESS
1000
+ .observation (null , DEFAULT_CONVENTION , () -> new JmsProcessObservationContext (message ), registry );
1001
+ }
1002
+ }
1003
+
985
1004
}
0 commit comments