Skip to content

Commit 36559ca

Browse files
authored
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` **Auto-cherry-pick to `6.5.x` & `6.4.x`**
1 parent e367374 commit 36559ca

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
@@ -255,12 +255,17 @@ protected void sendMessage(@Nullable Message<?> message) {
255255
}
256256

257257
try {
258-
IntegrationObservation.HANDLER.observation(
259-
this.observationConvention,
260-
DefaultMessageReceiverObservationConvention.INSTANCE,
261-
() -> new MessageReceiverContext(message, getComponentName(), "message-producer"),
262-
this.observationRegistry)
263-
.observe(() -> this.messagingTemplate.send(getRequiredOutputChannel(), trackMessageIfAny(message)));
258+
if (isObserved()) {
259+
IntegrationObservation.HANDLER.observation(
260+
this.observationConvention,
261+
DefaultMessageReceiverObservationConvention.INSTANCE,
262+
() -> new MessageReceiverContext(message, getComponentName(), "message-producer"),
263+
this.observationRegistry)
264+
.observe(() -> sendMessageWithTracking(message));
265+
}
266+
else {
267+
sendMessageWithTracking(message);
268+
}
264269
}
265270
catch (RuntimeException ex) {
266271
if (!sendErrorMessageIfNecessary(message, ex)) {
@@ -269,6 +274,10 @@ protected void sendMessage(@Nullable Message<?> message) {
269274
}
270275
}
271276

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

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
@@ -262,13 +262,15 @@ protected void handleMessage(Message<?> messageArg) {
262262
*/
263263
@Override
264264
protected void messageReceived(@Nullable IntegrationResourceHolder holder, Message<?> message) {
265-
Observation observation =
266-
IntegrationObservation.HANDLER.observation(this.observationConvention,
267-
DefaultMessageReceiverObservationConvention.INSTANCE,
268-
() -> new MessageReceiverContext(message, getComponentName(), "message-source"),
269-
this.observationRegistry);
270-
271-
observation.start().openScope();
265+
if (isObserved()) {
266+
Observation observation =
267+
IntegrationObservation.HANDLER.observation(this.observationConvention,
268+
DefaultMessageReceiverObservationConvention.INSTANCE,
269+
() -> new MessageReceiverContext(message, getComponentName(), "message-source"),
270+
this.observationRegistry);
271+
272+
observation.start().openScope();
273+
}
272274
super.messageReceived(holder, message);
273275
}
274276

0 commit comments

Comments
 (0)