Skip to content

Commit 1e0136b

Browse files
artembilanspring-builds
authored andcommitted
GH-10379: Optimize Observability API usage (#10380)
Fixes: #10379 The `ObservationRegistry.NOOP` still brings some performance overhead. * Fix `MessageProducerSupport` & `SourcePollingChannelAdapter` to check for `isObserved()` before using the `IntegrationObservation` (cherry picked from commit 36559ca)
1 parent 742e125 commit 1e0136b

File tree

2 files changed

+24
-13
lines changed

2 files changed

+24
-13
lines changed

spring-integration-core/src/main/java/org/springframework/integration/endpoint/MessageProducerSupport.java

Lines changed: 15 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -253,12 +253,17 @@ protected void sendMessage(Message<?> message) {
253253
}
254254

255255
try {
256-
IntegrationObservation.HANDLER.observation(
257-
this.observationConvention,
258-
DefaultMessageReceiverObservationConvention.INSTANCE,
259-
() -> new MessageReceiverContext(message, getComponentName(), "message-producer"),
260-
this.observationRegistry)
261-
.observe(() -> this.messagingTemplate.send(getRequiredOutputChannel(), trackMessageIfAny(message)));
256+
if (isObserved()) {
257+
IntegrationObservation.HANDLER.observation(
258+
this.observationConvention,
259+
DefaultMessageReceiverObservationConvention.INSTANCE,
260+
() -> new MessageReceiverContext(message, getComponentName(), "message-producer"),
261+
this.observationRegistry)
262+
.observe(() -> sendMessageWithTracking(message));
263+
}
264+
else {
265+
sendMessageWithTracking(message);
266+
}
262267
}
263268
catch (RuntimeException ex) {
264269
if (!sendErrorMessageIfNecessary(message, ex)) {
@@ -267,6 +272,10 @@ protected void sendMessage(Message<?> message) {
267272
}
268273
}
269274

275+
private void sendMessageWithTracking(Message<?> message) {
276+
this.messagingTemplate.send(getRequiredOutputChannel(), trackMessageIfAny(message));
277+
}
278+
270279
protected void subscribeToPublisher(Publisher<? extends Message<?>> publisher) {
271280
MessageChannel channelForSubscription = getRequiredOutputChannel();
272281

spring-integration-core/src/main/java/org/springframework/integration/endpoint/SourcePollingChannelAdapter.java

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -257,13 +257,15 @@ protected Message<?> receiveMessage() {
257257
*/
258258
@Override
259259
protected void messageReceived(@Nullable IntegrationResourceHolder holder, Message<?> message) {
260-
Observation observation =
261-
IntegrationObservation.HANDLER.observation(this.observationConvention,
262-
DefaultMessageReceiverObservationConvention.INSTANCE,
263-
() -> new MessageReceiverContext(message, getComponentName(), "message-source"),
264-
this.observationRegistry);
265-
266-
observation.start().openScope();
260+
if (isObserved()) {
261+
Observation observation =
262+
IntegrationObservation.HANDLER.observation(this.observationConvention,
263+
DefaultMessageReceiverObservationConvention.INSTANCE,
264+
() -> new MessageReceiverContext(message, getComponentName(), "message-source"),
265+
this.observationRegistry);
266+
267+
observation.start().openScope();
268+
}
267269
super.messageReceived(holder, message);
268270
}
269271

0 commit comments

Comments
 (0)