From 2f2ced85931ba2d92e7e62eb963d1a8c35c88803 Mon Sep 17 00:00:00 2001 From: Marcin Grzejszczak Date: Thu, 27 Jan 2022 12:28:34 +0100 Subject: [PATCH] Working around the stomp workaround without this workaround there is a problem with mutability of headers with this change / workaround we're ensuring that the headers remain immutable. We will fix this in Spring Framework 6; Spring Boot 3 in a much better way fixes gh-1325 --- .../TraceSpringIntegrationAutoConfiguration.java | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/spring-cloud-sleuth-autoconfigure/src/main/java/org/springframework/cloud/sleuth/autoconfig/instrument/messaging/TraceSpringIntegrationAutoConfiguration.java b/spring-cloud-sleuth-autoconfigure/src/main/java/org/springframework/cloud/sleuth/autoconfig/instrument/messaging/TraceSpringIntegrationAutoConfiguration.java index 2758e00fa..fadbdfee2 100644 --- a/spring-cloud-sleuth-autoconfigure/src/main/java/org/springframework/cloud/sleuth/autoconfig/instrument/messaging/TraceSpringIntegrationAutoConfiguration.java +++ b/spring-cloud-sleuth-autoconfigure/src/main/java/org/springframework/cloud/sleuth/autoconfig/instrument/messaging/TraceSpringIntegrationAutoConfiguration.java @@ -38,9 +38,11 @@ import org.springframework.context.annotation.ConditionContext; import org.springframework.context.annotation.Conditional; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.ConfigurationCondition; +import org.springframework.core.Ordered; import org.springframework.core.type.AnnotatedTypeMetadata; import org.springframework.integration.channel.interceptor.GlobalChannelInterceptorWrapper; import org.springframework.integration.config.GlobalChannelInterceptor; +import org.springframework.messaging.support.ImmutableMessageChannelInterceptor; import org.springframework.messaging.support.MessageHeaderAccessor; import org.springframework.util.ObjectUtils; import org.springframework.util.StringUtils; @@ -86,6 +88,16 @@ public class TraceSpringIntegrationAutoConfiguration { traceMessagePropagationGetter, remoteServiceNameMapper(properties), messageSpanCustomizer); } + @Bean + GlobalChannelInterceptorWrapper afterSleuthImmutableMessageChannelInterceptor( + SleuthIntegrationMessagingProperties properties) { + GlobalChannelInterceptorWrapper interceptor = new GlobalChannelInterceptorWrapper( + new ImmutableMessageChannelInterceptor()); + interceptor.setOrder(Ordered.LOWEST_PRECEDENCE); + interceptor.setPatterns(properties.getPatterns()); + return interceptor; + } + static Function remoteServiceNameMapper(SleuthMessagingProperties properties) { return s -> { if (!StringUtils.hasText(s)) {